]> SALOME platform Git repositories - modules/homard.git/commitdiff
Salome HOME
Merge remote branch 'origin/master' into gn/evol_01
authorGerald NICOLAS <gerald.nicolas@edf.fr>
Wed, 31 May 2017 13:15:12 +0000 (15:15 +0200)
committerGerald NICOLAS <gerald.nicolas@edf.fr>
Wed, 31 May 2017 13:15:12 +0000 (15:15 +0200)
629 files changed:
.gitignore [new file with mode: 0644]
AUTHORS [deleted file]
CMakeLists.txt [new file with mode: 0755]
COPYING [new file with mode: 0644]
ChangeLog [deleted file]
HOMARD_version.h.in
Makefile.am [deleted file]
NEWS [deleted file]
README
SalomeHOMARDConfig.cmake.in [new file with mode: 0644]
adm_local/CMakeLists.txt [new file with mode: 0755]
adm_local/Makefile.am [deleted file]
adm_local/unix/CMakeLists.txt [new file with mode: 0755]
adm_local/unix/Makefile.am [deleted file]
adm_local/unix/config_files/CMakeLists.txt [new file with mode: 0755]
adm_local/unix/config_files/Makefile.am [deleted file]
adm_local/unix/config_files/README [deleted file]
adm_local/unix/config_files/check_GUI.m4
adm_local/unix/config_files/check_Med2.m4
adm_local/unix/config_files/check_sphinx.m4
adm_local/unix/make_common_starter.am [deleted file]
bin/CMakeLists.txt [new file with mode: 0755]
bin/Makefile.am [deleted file]
bin/VERSION.in
bin/runAppli.in [deleted file]
bin/runHOMARD.in [new file with mode: 0755]
bin/runHOMARD.py [new file with mode: 0755]
bin/runSalome.py [deleted file]
build_configure [deleted file]
clean_configure [deleted file]
configure.ac [deleted file]
doc/CMakeLists.txt [new file with mode: 0755]
doc/Makefile.am [deleted file]
doc/conf.py.in [deleted file]
doc/en/CMakeLists.txt [new file with mode: 0755]
doc/en/conf.py.in [new file with mode: 0644]
doc/en/demarrage_rapide.rst [new file with mode: 0644]
doc/en/divers.rst [new file with mode: 0644]
doc/en/glossaire.rst [new file with mode: 0644]
doc/en/gui_create_boundary.rst [new file with mode: 0644]
doc/en/gui_create_case.rst [new file with mode: 0644]
doc/en/gui_create_hypothese.rst [new file with mode: 0644]
doc/en/gui_create_iteration.rst [new file with mode: 0644]
doc/en/gui_create_yacs.rst [new file with mode: 0644]
doc/en/gui_create_yacs_aster.rst [new file with mode: 0644]
doc/en/gui_create_zone.rst [new file with mode: 0644]
doc/en/gui_homard.rst [new file with mode: 0644]
doc/en/gui_mesh_info.rst [new file with mode: 0644]
doc/en/gui_usage.rst [new file with mode: 0644]
doc/en/images/create_boundary_1.png [new file with mode: 0644]
doc/en/images/create_boundary_an_1.png [new file with mode: 0644]
doc/en/images/create_boundary_an_2.png [new file with mode: 0644]
doc/en/images/create_boundary_an_3.png [new file with mode: 0644]
doc/en/images/create_boundary_an_4.png [new file with mode: 0644]
doc/en/images/create_boundary_an_co_1.png [new file with mode: 0644]
doc/en/images/create_boundary_an_co_2.png [new file with mode: 0644]
doc/en/images/create_boundary_an_cy.png [new file with mode: 0644]
doc/en/images/create_boundary_an_sp.png [new file with mode: 0644]
doc/en/images/create_boundary_an_to.png [new file with mode: 0644]
doc/en/images/create_boundary_di_1.png [new file with mode: 0644]
doc/en/images/create_boundary_di_2.png [new file with mode: 0644]
doc/en/images/create_boundary_di_3.png [new file with mode: 0644]
doc/en/images/create_case_2.png [new file with mode: 0644]
doc/en/images/create_case_3.png [new file with mode: 0644]
doc/en/images/create_case_4.png [new file with mode: 0644]
doc/en/images/create_case_5.png [new file with mode: 0644]
doc/en/images/create_case_6.png [new file with mode: 0644]
doc/en/images/create_case_7.png [new file with mode: 0644]
doc/en/images/create_case_8.png [new file with mode: 0644]
doc/en/images/create_case_9.png [new file with mode: 0644]
doc/en/images/create_hypothese_1.png [new file with mode: 0644]
doc/en/images/create_hypothese_2.png [new file with mode: 0644]
doc/en/images/create_hypothese_av_1.png [new file with mode: 0644]
doc/en/images/create_hypothese_ch_1.png [new file with mode: 0644]
doc/en/images/create_hypothese_ch_2.png [new file with mode: 0644]
doc/en/images/create_hypothese_ch_3.png [new file with mode: 0644]
doc/en/images/create_hypothese_ch_4.png [new file with mode: 0644]
doc/en/images/create_hypothese_ch_5.png [new file with mode: 0644]
doc/en/images/create_hypothese_gr_1.png [new file with mode: 0644]
doc/en/images/create_hypothese_gr_2.png [new file with mode: 0644]
doc/en/images/create_hypothese_zo_1.png [new file with mode: 0644]
doc/en/images/create_hypothese_zo_2.png [new file with mode: 0644]
doc/en/images/create_iteration_1.png [new file with mode: 0644]
doc/en/images/create_iteration_2.png [new file with mode: 0644]
doc/en/images/create_iteration_3.png [new file with mode: 0644]
doc/en/images/create_iteration_4.png [new file with mode: 0644]
doc/en/images/create_iteration_5.png [new file with mode: 0644]
doc/en/images/create_iteration_6.png [new file with mode: 0644]
doc/en/images/create_iteration_7.png [new file with mode: 0644]
doc/en/images/create_yacs_01.png [new file with mode: 0644]
doc/en/images/create_yacs_1.png [new file with mode: 0644]
doc/en/images/create_zone_01.png [new file with mode: 0644]
doc/en/images/create_zone_1.png [new file with mode: 0644]
doc/en/images/create_zone_2.png [new file with mode: 0644]
doc/en/images/create_zone_21.png [new file with mode: 0644]
doc/en/images/create_zone_22.png [new file with mode: 0644]
doc/en/images/create_zone_23.png [new file with mode: 0644]
doc/en/images/create_zone_3.png [new file with mode: 0644]
doc/en/images/create_zone_4.png [new file with mode: 0644]
doc/en/images/homard_1.png [new file with mode: 0644]
doc/en/images/homard_2.png [new file with mode: 0644]
doc/en/images/intro_1.png [new file with mode: 0644]
doc/en/images/intro_31.png [new file with mode: 0644]
doc/en/images/intro_32.png [new file with mode: 0644]
doc/en/images/intro_33.png [new file with mode: 0644]
doc/en/images/intro_331.png [new file with mode: 0644]
doc/en/images/intro_34.png [new file with mode: 0644]
doc/en/images/intro_35.png [new file with mode: 0644]
doc/en/images/intro_36.png [new file with mode: 0644]
doc/en/images/intro_37.png [new file with mode: 0644]
doc/en/images/intro_38.png [new file with mode: 0644]
doc/en/images/intro_39.png [new file with mode: 0644]
doc/en/images/intro_8.gif [new file with mode: 0644]
doc/en/images/lancement_1.png [new file with mode: 0644]
doc/en/images/lancement_2.png [new file with mode: 0644]
doc/en/images/lancement_3.png [new file with mode: 0644]
doc/en/images/mesh_info_1.png [new file with mode: 0644]
doc/en/images/mesh_info_2.png [new file with mode: 0644]
doc/en/images/mesh_info_3.png [new file with mode: 0644]
doc/en/images/mesh_info_4.png [new file with mode: 0644]
doc/en/images/preferences_1.png [new file with mode: 0644]
doc/en/images/pursue_case_1.png [new file with mode: 0644]
doc/en/images/pursue_case_2.png [new file with mode: 0644]
doc/en/images/pursue_case_3.png [new file with mode: 0644]
doc/en/index.rst [new file with mode: 0644]
doc/en/intro.rst [new file with mode: 0644]
doc/en/preferences.rst [new file with mode: 0644]
doc/en/regles.rst [new file with mode: 0644]
doc/en/tui_create_boundary.rst [new file with mode: 0644]
doc/en/tui_create_case.rst [new file with mode: 0644]
doc/en/tui_create_hypothese.rst [new file with mode: 0644]
doc/en/tui_create_iteration.rst [new file with mode: 0644]
doc/en/tui_create_yacs.rst [new file with mode: 0644]
doc/en/tui_create_zone.rst [new file with mode: 0644]
doc/en/tui_homard.rst [new file with mode: 0644]
doc/en/tui_usage.rst [new file with mode: 0644]
doc/en/tutorials.rst [new file with mode: 0644]
doc/en/yacs.rst [new file with mode: 0644]
doc/files/licence.en.txt [new file with mode: 0644]
doc/files/licence.fr.txt [new file with mode: 0644]
doc/files/tutorial_1.00.med.gz
doc/files/tutorial_1.py [changed mode: 0644->0755]
doc/files/tutorial_2.00.med.gz
doc/files/tutorial_2.py [changed mode: 0644->0755]
doc/files/tutorial_3.00.med.gz
doc/files/tutorial_3.01.med.gz
doc/files/tutorial_3.py [changed mode: 0644->0755]
doc/files/tutorial_4.00.med.gz
doc/files/tutorial_4.fr.med.gz
doc/files/tutorial_4.py [changed mode: 0644->0755]
doc/files/tutorial_4.xml [new file with mode: 0644]
doc/files/tutorial_5.00.med.gz
doc/files/tutorial_5.fr.med.gz
doc/files/tutorial_5.py [changed mode: 0644->0755]
doc/files/tutorial_util.py [new file with mode: 0755]
doc/files/yacs_01.en.xml [new file with mode: 0644]
doc/files/yacs_01.fr.xml [new file with mode: 0644]
doc/files/yacs_aster_01.comm [new file with mode: 0644]
doc/files/yacs_script.py [new file with mode: 0755]
doc/files/yacs_script_test.py [new file with mode: 0755]
doc/fr/CMakeLists.txt [new file with mode: 0755]
doc/fr/conf.py.in [new file with mode: 0644]
doc/fr/demarrage_rapide.rst [new file with mode: 0644]
doc/fr/divers.rst [new file with mode: 0644]
doc/fr/glossaire.rst [new file with mode: 0644]
doc/fr/gui_create_boundary.rst [new file with mode: 0644]
doc/fr/gui_create_case.rst [new file with mode: 0644]
doc/fr/gui_create_hypothese.rst [new file with mode: 0644]
doc/fr/gui_create_iteration.rst [new file with mode: 0644]
doc/fr/gui_create_yacs.rst [new file with mode: 0644]
doc/fr/gui_create_yacs_aster.rst [new file with mode: 0644]
doc/fr/gui_create_zone.rst [new file with mode: 0644]
doc/fr/gui_homard.rst [new file with mode: 0644]
doc/fr/gui_mesh_info.rst [new file with mode: 0644]
doc/fr/gui_usage.rst [new file with mode: 0644]
doc/fr/images/create_boundary_1.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_1.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_2.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_3.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_4.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_co_1.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_co_2.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_cy.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_sp.png [new file with mode: 0644]
doc/fr/images/create_boundary_an_to.png [new file with mode: 0644]
doc/fr/images/create_boundary_di_1.png [new file with mode: 0644]
doc/fr/images/create_boundary_di_2.png [new file with mode: 0644]
doc/fr/images/create_boundary_di_3.png [new file with mode: 0644]
doc/fr/images/create_case_2.png [new file with mode: 0644]
doc/fr/images/create_case_3.png [new file with mode: 0644]
doc/fr/images/create_case_4.png [new file with mode: 0644]
doc/fr/images/create_case_5.png [new file with mode: 0644]
doc/fr/images/create_case_6.png [new file with mode: 0644]
doc/fr/images/create_case_7.png [new file with mode: 0644]
doc/fr/images/create_case_8.png [new file with mode: 0644]
doc/fr/images/create_case_9.png [new file with mode: 0644]
doc/fr/images/create_hypothese_1.png [new file with mode: 0644]
doc/fr/images/create_hypothese_2.png [new file with mode: 0644]
doc/fr/images/create_hypothese_av_1.png [new file with mode: 0644]
doc/fr/images/create_hypothese_ch_1.png [new file with mode: 0644]
doc/fr/images/create_hypothese_ch_2.png [new file with mode: 0644]
doc/fr/images/create_hypothese_ch_3.png [new file with mode: 0644]
doc/fr/images/create_hypothese_ch_4.png [new file with mode: 0644]
doc/fr/images/create_hypothese_ch_5.png [new file with mode: 0644]
doc/fr/images/create_hypothese_gr_1.png [new file with mode: 0644]
doc/fr/images/create_hypothese_gr_2.png [new file with mode: 0644]
doc/fr/images/create_hypothese_zo_1.png [new file with mode: 0644]
doc/fr/images/create_hypothese_zo_2.png [new file with mode: 0644]
doc/fr/images/create_iteration_1.png [new file with mode: 0644]
doc/fr/images/create_iteration_2.png [new file with mode: 0644]
doc/fr/images/create_iteration_3.png [new file with mode: 0644]
doc/fr/images/create_iteration_4.png [new file with mode: 0644]
doc/fr/images/create_iteration_5.png [new file with mode: 0644]
doc/fr/images/create_iteration_6.png [new file with mode: 0644]
doc/fr/images/create_iteration_7.png [new file with mode: 0644]
doc/fr/images/create_yacs_01.png [new file with mode: 0644]
doc/fr/images/create_yacs_1.png [new file with mode: 0644]
doc/fr/images/create_zone_01.png [new file with mode: 0644]
doc/fr/images/create_zone_1.png [new file with mode: 0644]
doc/fr/images/create_zone_2.png [new file with mode: 0644]
doc/fr/images/create_zone_21.png [new file with mode: 0644]
doc/fr/images/create_zone_22.png [new file with mode: 0644]
doc/fr/images/create_zone_23.png [new file with mode: 0644]
doc/fr/images/create_zone_3.png [new file with mode: 0644]
doc/fr/images/create_zone_4.png [new file with mode: 0644]
doc/fr/images/homard_1.png [new file with mode: 0644]
doc/fr/images/homard_2.png [new file with mode: 0644]
doc/fr/images/intro_1.png [new file with mode: 0644]
doc/fr/images/intro_31.png [new file with mode: 0644]
doc/fr/images/intro_32.png [new file with mode: 0644]
doc/fr/images/intro_33.png [new file with mode: 0644]
doc/fr/images/intro_331.png [new file with mode: 0644]
doc/fr/images/intro_34.png [new file with mode: 0644]
doc/fr/images/intro_35.png [new file with mode: 0644]
doc/fr/images/intro_36.png [new file with mode: 0644]
doc/fr/images/intro_37.png [new file with mode: 0644]
doc/fr/images/intro_38.png [new file with mode: 0644]
doc/fr/images/intro_39.png [new file with mode: 0644]
doc/fr/images/intro_8.gif [new file with mode: 0644]
doc/fr/images/lancement_1.png [new file with mode: 0644]
doc/fr/images/lancement_2.png [new file with mode: 0644]
doc/fr/images/lancement_3.png [new file with mode: 0644]
doc/fr/images/mesh_info_1.png [new file with mode: 0644]
doc/fr/images/mesh_info_2.png [new file with mode: 0644]
doc/fr/images/mesh_info_3.png [new file with mode: 0644]
doc/fr/images/mesh_info_4.png [new file with mode: 0644]
doc/fr/images/preferences_1.png [new file with mode: 0644]
doc/fr/images/pursue_case_1.png [new file with mode: 0644]
doc/fr/images/pursue_case_2.png [new file with mode: 0644]
doc/fr/images/pursue_case_3.png [new file with mode: 0644]
doc/fr/index.rst [new file with mode: 0644]
doc/fr/intro.rst [new file with mode: 0644]
doc/fr/preferences.rst [new file with mode: 0644]
doc/fr/regles.rst [new file with mode: 0644]
doc/fr/tui_create_boundary.rst [new file with mode: 0644]
doc/fr/tui_create_case.rst [new file with mode: 0644]
doc/fr/tui_create_hypothese.rst [new file with mode: 0644]
doc/fr/tui_create_iteration.rst [new file with mode: 0644]
doc/fr/tui_create_yacs.rst [new file with mode: 0644]
doc/fr/tui_create_zone.rst [new file with mode: 0644]
doc/fr/tui_homard.rst [new file with mode: 0644]
doc/fr/tui_usage.rst [new file with mode: 0644]
doc/fr/tutorials.rst [new file with mode: 0644]
doc/fr/yacs.rst [new file with mode: 0644]
doc/glossaire.rst [deleted file]
doc/gui_create_boundary.rst [deleted file]
doc/gui_create_case.rst [deleted file]
doc/gui_create_hypothese.rst [deleted file]
doc/gui_create_iteration.rst [deleted file]
doc/gui_create_zone.rst [deleted file]
doc/gui_homard.rst [deleted file]
doc/gui_usage.rst [deleted file]
doc/images/cl_0.gif [new file with mode: 0644]
doc/images/cl_1.gif [new file with mode: 0644]
doc/images/cl_2.gif [new file with mode: 0644]
doc/images/cl_3.gif [new file with mode: 0644]
doc/images/cl_4.gif [new file with mode: 0644]
doc/images/cl_5.gif [new file with mode: 0644]
doc/images/cl_6.gif [new file with mode: 0644]
doc/images/create_boundary_1.png [deleted file]
doc/images/create_boundary_an_1.png [deleted file]
doc/images/create_boundary_an_2.png [deleted file]
doc/images/create_boundary_an_3.png [deleted file]
doc/images/create_boundary_an_4.png [deleted file]
doc/images/create_boundary_an_cy.png [deleted file]
doc/images/create_boundary_an_sp.png [deleted file]
doc/images/create_boundary_di_1.png [deleted file]
doc/images/create_boundary_di_2.png [deleted file]
doc/images/create_boundary_di_3.png [deleted file]
doc/images/create_case_1.png
doc/images/create_case_2.png [deleted file]
doc/images/create_case_3.png [deleted file]
doc/images/create_case_4.png [deleted file]
doc/images/create_case_5.png [deleted file]
doc/images/create_case_6.png [deleted file]
doc/images/create_case_7.png [deleted file]
doc/images/create_hypothese_1.png [deleted file]
doc/images/create_hypothese_2.png [deleted file]
doc/images/create_hypothese_av_1.png [deleted file]
doc/images/create_hypothese_ch_1.png [deleted file]
doc/images/create_hypothese_ch_2.png [deleted file]
doc/images/create_hypothese_ch_3.png [deleted file]
doc/images/create_hypothese_ch_4.png [deleted file]
doc/images/create_hypothese_ch_5.png [deleted file]
doc/images/create_hypothese_gr_1.png [deleted file]
doc/images/create_hypothese_gr_2.png [deleted file]
doc/images/create_hypothese_zo_1.png [deleted file]
doc/images/create_hypothese_zo_2.png [deleted file]
doc/images/create_iteration_1.png [deleted file]
doc/images/create_iteration_2.png [deleted file]
doc/images/create_iteration_3.png [deleted file]
doc/images/create_iteration_4.png [deleted file]
doc/images/create_iteration_5.png [deleted file]
doc/images/create_iteration_6.png [deleted file]
doc/images/create_iteration_7.png [deleted file]
doc/images/create_zone_1.png [deleted file]
doc/images/create_zone_2.png [deleted file]
doc/images/create_zone_21.png [deleted file]
doc/images/create_zone_22.png [deleted file]
doc/images/create_zone_23.png [deleted file]
doc/images/create_zone_3.png [deleted file]
doc/images/create_zone_4.png [deleted file]
doc/images/dec.pent.png [new file with mode: 0644]
doc/images/dec_hex.gif [new file with mode: 0644]
doc/images/dec_hex.png [new file with mode: 0644]
doc/images/dec_quad_1.png [new file with mode: 0644]
doc/images/dec_quad_2.png [new file with mode: 0644]
doc/images/dec_quad_3.png [new file with mode: 0644]
doc/images/dec_quad_4.png [new file with mode: 0644]
doc/images/dec_tetr_1.gif [new file with mode: 0644]
doc/images/dec_tetr_2.gif [new file with mode: 0644]
doc/images/dec_tetr_3.gif [new file with mode: 0644]
doc/images/dec_tetr_4.gif [new file with mode: 0644]
doc/images/dec_tetr_5.gif [new file with mode: 0644]
doc/images/dec_tetr_6.gif [new file with mode: 0644]
doc/images/dec_tetr_7.gif [new file with mode: 0644]
doc/images/dec_tria_1.gif [new file with mode: 0644]
doc/images/dec_tria_2.png [new file with mode: 0644]
doc/images/hexa1arete.png [new file with mode: 0644]
doc/images/hexa2aretes.png [new file with mode: 0644]
doc/images/hexa3aretes.png [new file with mode: 0644]
doc/images/hexaface.png [new file with mode: 0644]
doc/images/homard_1.png [deleted file]
doc/images/homard_d.ico [new file with mode: 0644]
doc/images/intro_1.png [deleted file]
doc/images/intro_31.png [deleted file]
doc/images/intro_32.png [deleted file]
doc/images/intro_33.png [deleted file]
doc/images/intro_34.png [deleted file]
doc/images/intro_35.png [deleted file]
doc/images/intro_36.png [deleted file]
doc/images/intro_37.png [deleted file]
doc/images/intro_38.png [deleted file]
doc/images/intro_39.png [deleted file]
doc/images/intro_40.png
doc/images/intro_9.2.png [new file with mode: 0644]
doc/images/intro_9.3.png [new file with mode: 0644]
doc/images/intro_9.4.png [new file with mode: 0644]
doc/images/lancement_1.png [deleted file]
doc/images/lancement_2.png [deleted file]
doc/images/lancement_3.png [deleted file]
doc/images/menu_1.png [deleted file]
doc/images/menu_2.png [deleted file]
doc/images/mesh_info_5.png [new file with mode: 0644]
doc/images/pursue_case_1.png [new file with mode: 0644]
doc/images/pursue_case_2.png [new file with mode: 0644]
doc/images/pursue_case_3.png [new file with mode: 0644]
doc/images/yacs_01.png [new file with mode: 0644]
doc/images/yacs_a_01.png [new file with mode: 0644]
doc/images/yacs_b_01.png [new file with mode: 0644]
doc/images/yacs_c_01.png [new file with mode: 0644]
doc/images/yacs_c_02.png [new file with mode: 0644]
doc/images/yacs_c_03.png [new file with mode: 0644]
doc/images/yacs_c_04.png [new file with mode: 0644]
doc/images/yacs_c_05.png [new file with mode: 0644]
doc/images/yacs_c_06.png [new file with mode: 0644]
doc/images/yacs_c_07.png [new file with mode: 0644]
doc/images/yacs_c_08.png [new file with mode: 0644]
doc/images/yacs_c_09.png [new file with mode: 0644]
doc/images/yacs_d_01.png [new file with mode: 0644]
doc/index.rst [deleted file]
doc/intro.rst [deleted file]
doc/tui_create_boundary.rst [deleted file]
doc/tui_create_case.rst [deleted file]
doc/tui_create_hypothese.rst [deleted file]
doc/tui_create_iteration.rst [deleted file]
doc/tui_create_zone.rst [deleted file]
doc/tui_homard.rst [deleted file]
doc/tui_usage.rst [deleted file]
doc/tutorials.rst [deleted file]
idl/CMakeLists.txt [new file with mode: 0755]
idl/Gen.xml
idl/HOMARD_Boundary.idl
idl/HOMARD_Cas.idl
idl/HOMARD_Gen.idl
idl/HOMARD_Hypothesis.idl
idl/HOMARD_Iteration.idl
idl/HOMARD_YACS.idl [new file with mode: 0644]
idl/HOMARD_Zone.idl
idl/Makefile.am [deleted file]
resources/CMakeLists.txt [new file with mode: 0755]
resources/HOMARDCatalog.xml.in
resources/HOMARD_en.ps [deleted file]
resources/HOMARD_en.xml [deleted file]
resources/HOMARD_fr.xml [deleted file]
resources/Makefile.am [deleted file]
resources/SalomeApp.xml.in
resources/advanced_mesh_info.png [new file with mode: 0644]
resources/cone.png [new file with mode: 0644]
resources/conedxyz.png [new file with mode: 0644]
resources/conepointvector.png [new file with mode: 0644]
resources/drapeau_en.gif [new file with mode: 0644]
resources/drapeau_fr.gif [new file with mode: 0644]
resources/full_view.png [new file with mode: 0644]
resources/iter_calulee.png [deleted file]
resources/iter_non_calulee.png [deleted file]
resources/iter_poursuite.png [new file with mode: 0644]
resources/loop.png [new file with mode: 0644]
resources/save.png [new file with mode: 0644]
resources/schema.png [new file with mode: 0644]
resources/table_view.png [new file with mode: 0644]
resources/toruspointvector.png [new file with mode: 0644]
resources/write.png [new file with mode: 0644]
resources/yacs.png [new file with mode: 0644]
resources/yacs_01.en.xml [new file with mode: 0644]
resources/yacs_01.fr.xml [new file with mode: 0644]
src/CMakeLists.txt [new file with mode: 0755]
src/CTestTestfileInstall.cmake [new file with mode: 0644]
src/HOMARD/CMakeLists.txt [new file with mode: 0644]
src/HOMARD/HOMARD.hxx [new file with mode: 0644]
src/HOMARD/HOMARD_Boundary.cxx
src/HOMARD/HOMARD_Boundary.hxx
src/HOMARD/HOMARD_Cas.cxx
src/HOMARD/HOMARD_Cas.hxx
src/HOMARD/HOMARD_DriverTools.cxx
src/HOMARD/HOMARD_DriverTools.hxx
src/HOMARD/HOMARD_Gen.cxx
src/HOMARD/HOMARD_Gen.hxx
src/HOMARD/HOMARD_Hypothesis.cxx
src/HOMARD/HOMARD_Hypothesis.hxx
src/HOMARD/HOMARD_Iteration.cxx
src/HOMARD/HOMARD_Iteration.hxx
src/HOMARD/HOMARD_YACS.cxx [new file with mode: 0644]
src/HOMARD/HOMARD_YACS.hxx [new file with mode: 0644]
src/HOMARD/HOMARD_Zone.cxx
src/HOMARD/HOMARD_Zone.hxx
src/HOMARD/HomardDriver.cxx
src/HOMARD/HomardDriver.hxx
src/HOMARD/Makefile.am [deleted file]
src/HOMARD/YACSDriver.cxx [new file with mode: 0644]
src/HOMARD/YACSDriver.hxx [new file with mode: 0644]
src/HOMARDGUI/CMakeLists.txt [new file with mode: 0644]
src/HOMARDGUI/CreateBoundaryAn.h [deleted file]
src/HOMARDGUI/CreateBoundaryAn.ui
src/HOMARDGUI/CreateBoundaryDi.h [deleted file]
src/HOMARDGUI/CreateBoundaryDi.ui
src/HOMARDGUI/CreateCase.h [deleted file]
src/HOMARDGUI/CreateCase.ui
src/HOMARDGUI/CreateHypothesis.h [deleted file]
src/HOMARDGUI/CreateHypothesis.ui
src/HOMARDGUI/CreateIteration.h [deleted file]
src/HOMARDGUI/CreateIteration.ui
src/HOMARDGUI/CreateListGroup.h [deleted file]
src/HOMARDGUI/CreateYACS.ui [new file with mode: 0644]
src/HOMARDGUI/CreateZone.h [deleted file]
src/HOMARDGUI/CreateZone.ui
src/HOMARDGUI/EditFile.h [deleted file]
src/HOMARDGUI/EditFile.ui
src/HOMARDGUI/HOMARDGUI.cxx
src/HOMARDGUI/HOMARDGUI.h
src/HOMARDGUI/HOMARDGUI_Exports.hxx [new file with mode: 0755]
src/HOMARDGUI/HOMARDGUI_Utils.cxx
src/HOMARDGUI/HOMARDGUI_Utils.h
src/HOMARDGUI/HOMARD_msg_en.ts
src/HOMARDGUI/HOMARD_msg_fr.ts
src/HOMARDGUI/HOMARD_msg_ja.ts [new file with mode: 0644]
src/HOMARDGUI/HomardQtCommun.cxx
src/HOMARDGUI/HomardQtCommun.h
src/HOMARDGUI/IterInfo.ui [new file with mode: 0644]
src/HOMARDGUI/Makefile.am [deleted file]
src/HOMARDGUI/MeshInfo.ui [new file with mode: 0644]
src/HOMARDGUI/MonCreateBoundaryAn.cxx
src/HOMARDGUI/MonCreateBoundaryAn.h
src/HOMARDGUI/MonCreateBoundaryDi.cxx
src/HOMARDGUI/MonCreateBoundaryDi.h
src/HOMARDGUI/MonCreateCase.cxx
src/HOMARDGUI/MonCreateCase.h
src/HOMARDGUI/MonCreateHypothesis.cxx
src/HOMARDGUI/MonCreateHypothesis.h
src/HOMARDGUI/MonCreateIteration.cxx
src/HOMARDGUI/MonCreateIteration.h
src/HOMARDGUI/MonCreateListGroup.cxx
src/HOMARDGUI/MonCreateListGroup.h
src/HOMARDGUI/MonCreateYACS.cxx [new file with mode: 0644]
src/HOMARDGUI/MonCreateYACS.h [new file with mode: 0644]
src/HOMARDGUI/MonCreateZone.cxx
src/HOMARDGUI/MonCreateZone.h
src/HOMARDGUI/MonEditBoundaryAn.cxx
src/HOMARDGUI/MonEditBoundaryAn.h
src/HOMARDGUI/MonEditBoundaryDi.cxx
src/HOMARDGUI/MonEditBoundaryDi.h
src/HOMARDGUI/MonEditCase.cxx
src/HOMARDGUI/MonEditCase.h
src/HOMARDGUI/MonEditFile.cxx
src/HOMARDGUI/MonEditFile.h
src/HOMARDGUI/MonEditHypothesis.cxx
src/HOMARDGUI/MonEditHypothesis.h
src/HOMARDGUI/MonEditIteration.cxx
src/HOMARDGUI/MonEditIteration.h
src/HOMARDGUI/MonEditListGroup.cxx
src/HOMARDGUI/MonEditListGroup.h
src/HOMARDGUI/MonEditYACS.cxx [new file with mode: 0644]
src/HOMARDGUI/MonEditYACS.h [new file with mode: 0644]
src/HOMARDGUI/MonEditZone.cxx
src/HOMARDGUI/MonEditZone.h
src/HOMARDGUI/MonIterInfo.cxx [new file with mode: 0644]
src/HOMARDGUI/MonIterInfo.h [new file with mode: 0644]
src/HOMARDGUI/MonMeshInfo.cxx [new file with mode: 0644]
src/HOMARDGUI/MonMeshInfo.h [new file with mode: 0644]
src/HOMARDGUI/MonPursueIteration.cxx [new file with mode: 0644]
src/HOMARDGUI/MonPursueIteration.h [new file with mode: 0644]
src/HOMARDGUI/PursueIteration.ui [new file with mode: 0644]
src/HOMARD_I/CMakeLists.txt [new file with mode: 0644]
src/HOMARD_I/HOMARD_Boundary_i.cxx
src/HOMARD_I/HOMARD_Boundary_i.hxx
src/HOMARD_I/HOMARD_Cas_i.cxx
src/HOMARD_I/HOMARD_Cas_i.hxx
src/HOMARD_I/HOMARD_Gen_i.cxx [changed mode: 0755->0644]
src/HOMARD_I/HOMARD_Gen_i.hxx
src/HOMARD_I/HOMARD_Hypothesis_i.cxx
src/HOMARD_I/HOMARD_Hypothesis_i.hxx
src/HOMARD_I/HOMARD_Iteration_i.cxx
src/HOMARD_I/HOMARD_Iteration_i.hxx
src/HOMARD_I/HOMARD_YACS_i.cxx [new file with mode: 0644]
src/HOMARD_I/HOMARD_YACS_i.hxx [new file with mode: 0644]
src/HOMARD_I/HOMARD_Zone_i.cxx
src/HOMARD_I/HOMARD_Zone_i.hxx
src/HOMARD_I/HOMARD_i.hxx [new file with mode: 0755]
src/HOMARD_I/HomardMedCommun.cxx
src/HOMARD_I/HomardMedCommun.h
src/HOMARD_I/Makefile.am [deleted file]
src/HOMARD_SCRIPTS/Makefile.am [deleted file]
src/HOMARD_SCRIPTS/testHomard.py [deleted file]
src/HOMARD_SCRIPTS/test_homard.py [deleted file]
src/HOMARD_SWIG/CMakeLists.txt [new file with mode: 0644]
src/HOMARD_SWIG/HOMARD_shared_modules.py
src/HOMARD_SWIG/Makefile.am [deleted file]
src/HOMARD_SWIG/libHOMARD_Swig.i
src/Makefile.am [deleted file]
src/tests/CMakeLists.txt [new file with mode: 0755]
src/tests/Test/CMakeLists.txt [new file with mode: 0755]
src/tests/Test/CTestTestfileInstall.cmake [new file with mode: 0644]
src/tests/Test/test_1.py [new file with mode: 0755]
src/tests/Test/test_2.py [new file with mode: 0755]
src/tests/Test/test_3.py [new file with mode: 0755]
src/tests/Test/test_4.py [new file with mode: 0755]
src/tests/Test/test_5.py [new file with mode: 0755]
src/tests/Test/test_util.py [new file with mode: 0755]
src/tests/Test/tutorial_1.py [new file with mode: 0755]
src/tests/Test/tutorial_2.py [new file with mode: 0755]
src/tests/Test/tutorial_3.py [new file with mode: 0755]
src/tests/Test/tutorial_4.py [new file with mode: 0755]
src/tests/Test/tutorial_5.py [new file with mode: 0755]
src/tests/samples/test_1.00.med [new file with mode: 0644]
src/tests/samples/test_1.01.med [new file with mode: 0644]
src/tests/samples/test_1.02.med [new file with mode: 0644]
src/tests/samples/test_1.apad.03.bilan [new file with mode: 0644]
src/tests/samples/test_1.en.odt [new file with mode: 0644]
src/tests/samples/test_1.en.pdf [new file with mode: 0644]
src/tests/samples/test_1.odt [new file with mode: 0644]
src/tests/samples/test_1.pdf [new file with mode: 0644]
src/tests/samples/test_1.png [new file with mode: 0644]
src/tests/samples/test_2.00.med [new file with mode: 0644]
src/tests/samples/test_2.apad.03.bilan [new file with mode: 0644]
src/tests/samples/test_2.en.odt [new file with mode: 0644]
src/tests/samples/test_2.en.pdf [new file with mode: 0644]
src/tests/samples/test_2.fr.med [new file with mode: 0644]
src/tests/samples/test_2.odt [new file with mode: 0644]
src/tests/samples/test_2.pdf [new file with mode: 0644]
src/tests/samples/test_2.png [new file with mode: 0644]
src/tests/samples/test_3.00.med [new file with mode: 0644]
src/tests/samples/test_3.apad.02.bilan [new file with mode: 0644]
src/tests/samples/test_3.en.odt [new file with mode: 0644]
src/tests/samples/test_3.en.pdf [new file with mode: 0644]
src/tests/samples/test_3.fr.med [new file with mode: 0644]
src/tests/samples/test_3.odt [new file with mode: 0644]
src/tests/samples/test_3.pdf [new file with mode: 0644]
src/tests/samples/test_3.png [new file with mode: 0644]
src/tests/samples/test_4.apad.02.bilan [new file with mode: 0644]
src/tests/samples/test_4.apad.03.bilan [new file with mode: 0644]
src/tests/samples/test_4.en.odt [new file with mode: 0644]
src/tests/samples/test_4.en.pdf [new file with mode: 0644]
src/tests/samples/test_4.odt [new file with mode: 0644]
src/tests/samples/test_4.pdf [new file with mode: 0644]
src/tests/samples/test_5.apad.03.bilan [new file with mode: 0644]
src/tests/samples/tutorial_1.apad.03.bilan [new file with mode: 0644]
src/tests/samples/tutorial_2.apad.02.bilan [new file with mode: 0644]
src/tests/samples/tutorial_3.apad.02.bilan [new file with mode: 0644]
src/tests/samples/tutorial_4.apad.03.bilan [new file with mode: 0644]
src/tests/samples/tutorial_5.apad.02.bilan [new file with mode: 0644]
tests/Makefile.am [deleted file]
tests/test_1.00.med [deleted file]
tests/test_1.01.med [deleted file]
tests/test_1.02.med [deleted file]
tests/test_1.apad.03.bilan [deleted file]
tests/test_1.en.odt [deleted file]
tests/test_1.en.pdf [deleted file]
tests/test_1.odt [deleted file]
tests/test_1.pdf [deleted file]
tests/test_1.png [deleted file]
tests/test_1.py [deleted file]
tests/test_2.00.med [deleted file]
tests/test_2.apad.03.bilan [deleted file]
tests/test_2.en.odt [deleted file]
tests/test_2.en.pdf [deleted file]
tests/test_2.fr.med [deleted file]
tests/test_2.odt [deleted file]
tests/test_2.pdf [deleted file]
tests/test_2.png [deleted file]
tests/test_2.py [deleted file]
tests/test_3.00.med [deleted file]
tests/test_3.apad.02.bilan [deleted file]
tests/test_3.en.odt [deleted file]
tests/test_3.en.pdf [deleted file]
tests/test_3.fr.med [deleted file]
tests/test_3.odt [deleted file]
tests/test_3.pdf [deleted file]
tests/test_3.png [deleted file]
tests/test_3.py [deleted file]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b25c15b
--- /dev/null
@@ -0,0 +1 @@
+*~
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..3d6a311
--- /dev/null
@@ -0,0 +1,288 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
+
+PROJECT(SalomeHOMARD C CXX)
+
+# Ensure a proper linker behavior:
+CMAKE_POLICY(SET CMP0003 NEW)
+
+# Versioning
+# ===========
+# Project name, upper case
+STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
+
+SET(${PROJECT_NAME_UC}_MAJOR_VERSION 8)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 3)
+SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
+SET(${PROJECT_NAME_UC}_VERSION
+  ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
+SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
+
+# Common CMake macros
+# ===================
+SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
+IF(EXISTS ${CONFIGURATION_ROOT_DIR})
+  LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
+  INCLUDE(SalomeMacros)
+ELSE()
+  MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
+ENDIF()
+
+# Find KERNEL
+# ===========
+SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
+IF(EXISTS ${KERNEL_ROOT_DIR})
+  LIST(APPEND CMAKE_MODULE_PATH "${KERNEL_ROOT_DIR}/salome_adm/cmake_files")
+  INCLUDE(SalomeMacros)
+  FIND_PACKAGE(SalomeKERNEL REQUIRED)
+  KERNEL_WITH_CORBA() # check whether KERNEL builded with CORBA
+ELSE(EXISTS ${KERNEL_ROOT_DIR})
+  MESSAGE(FATAL_ERROR "We absolutely need a Salome KERNEL, please define KERNEL_ROOT_DIR")
+ENDIF(EXISTS ${KERNEL_ROOT_DIR})
+
+# Find SALOME GUI
+# ===============
+SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR} CACHE PATH "Path to the Salome GUI")
+IF(EXISTS ${GUI_ROOT_DIR})
+  LIST(APPEND CMAKE_MODULE_PATH "${GUI_ROOT_DIR}/adm_local/cmake_files")
+  FIND_PACKAGE(SalomeGUI REQUIRED)
+  SALOME_GUI_WITH_CORBA() # check whether GUI builded with CORBA
+  SALOME_GUI_MODE(OPTIONAL SALOME_USE_PYCONSOLE)
+  ADD_DEFINITIONS(${GUI_DEFINITIONS})
+  INCLUDE_DIRECTORIES(${GUI_INCLUDE_DIRS})
+ELSE(EXISTS ${GUI_ROOT_DIR})
+  MESSAGE(FATAL_ERROR "We absolutely need a Salome GUI, please define GUI_ROOT_DIR")
+ENDIF(EXISTS ${GUI_ROOT_DIR})
+
+# Platform setup
+# ==============
+INCLUDE(SalomeSetupPlatform)   # From KERNEL
+# Always build libraries as shared objects:
+SET(BUILD_SHARED_LIBS TRUE)
+
+# additional preprocessor / compiler flags
+#ADD_DEFINITIONS(-DCMAKE_BUILD)
+IF(WIN32)
+  ADD_DEFINITIONS(-DNOGDI)
+ENDIF(WIN32)
+
+# User options
+# ============
+OPTION(SALOME_BUILD_DOC "Generate SALOME HOMARD documentation" ON)
+OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
+
+# Python
+FIND_PACKAGE(SalomePythonInterp REQUIRED)
+FIND_PACKAGE(SalomePythonLibs REQUIRED)
+
+# Other KERNEL optionals: 
+IF(SALOME_BUILD_TESTS)
+  ENABLE_TESTING()
+  FIND_PACKAGE(SalomeCppUnit)
+  SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)
+ENDIF()
+IF(SALOME_BUILD_DOC)
+  FIND_PACKAGE(SalomeSphinx)
+  SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
+ENDIF()
+
+
+##
+## From KERNEL:
+##
+
+# Boost
+FIND_PACKAGE(SalomeBoost REQUIRED)
+# CORBA
+FIND_PACKAGE(SalomeOmniORB REQUIRED)
+FIND_PACKAGE(SalomeOmniORBPy REQUIRED)
+# HDF5
+FIND_PACKAGE(SalomeHDF5 REQUIRED COMPONENTS C)
+
+
+##
+## From GUI:
+##
+
+# Various
+# Qt
+IF (NOT SALOME_GUI_BUILD_WITH_QT5)
+  FIND_PACKAGE(SalomeQt4 REQUIRED COMPONENTS QtCore QtGui)
+ELSE()
+  FIND_PACKAGE(SalomeQt5 REQUIRED)
+ENDIF()
+# SIP
+FIND_PACKAGE(SalomeSIP REQUIRED)
+# PyQt
+IF (NOT SALOME_GUI_BUILD_WITH_QT5)
+  FIND_PACKAGE(SalomePyQt4 REQUIRED)
+ELSE()
+  FIND_PACKAGE(SalomePyQt5 REQUIRED)
+ENDIF()
+# OCCT
+FIND_PACKAGE(SalomeCAS REQUIRED)
+
+# Find GEOM
+# ===========
+
+SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR} CACHE PATH "Path to the Salome GEOM")
+IF(EXISTS ${GEOM_ROOT_DIR})
+  LIST(APPEND CMAKE_MODULE_PATH "${GEOM_ROOT_DIR}/adm_local/cmake_files")
+  FIND_PACKAGE(SalomeGEOM REQUIRED)
+ELSE(EXISTS ${GEOM_ROOT_DIR})
+  MESSAGE(FATAL_ERROR "We absolutely need a Salome GEOM, please define GEOM_ROOT_DIR")
+ENDIF(EXISTS ${GEOM_ROOT_DIR})
+
+# Find SMESH
+# ===========
+
+SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR} CACHE PATH "Path to the Salome SMESH")
+IF(EXISTS ${SMESH_ROOT_DIR})
+  LIST(APPEND CMAKE_MODULE_PATH "${SMESH_ROOT_DIR}/adm_local/cmake_files")
+  FIND_PACKAGE(SalomeSMESH REQUIRED)
+  ADD_DEFINITIONS(${SMESH_DEFINITIONS})
+  INCLUDE_DIRECTORIES(${SMESH_INCLUDE_DIRS})
+ELSE(EXISTS ${SMESH_ROOT_DIR})
+  MESSAGE(FATAL_ERROR "We absolutely need a Salome SMESH, please define SMESH_ROOT_DIR")
+ENDIF(EXISTS ${SMESH_ROOT_DIR})
+
+##
+## From SMESH:
+##
+
+# MedFile
+FIND_PACKAGE(SalomeMEDFile REQUIRED)
+
+# Detection summary:
+SALOME_PACKAGE_REPORT_AND_CHECK()
+
+# Directories
+# (default values taken from KERNEL)
+# ===========
+SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOME binaries")
+SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
+SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
+SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
+SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
+   "Install path: SALOME scripts")
+SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
+   "Install path: SALOME script data")
+SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
+   "Install path: SALOME Python scripts")
+SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH
+   "Install path: SALOME application skeleton - scripts")
+SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH
+   "Install path: SALOME application skeleton - Python")
+SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
+SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
+   "Install path: SALOME Python shared modules")
+SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
+    "Install path: local SALOME CMake files")
+SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
+  "Install path: local SALOME config files (obsolete, to be removed)")
+SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
+SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
+
+# Specific to HOMARD:
+SET(SALOME_HOMARD_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/homard" CACHE PATH
+  "Install path: SALOME HOMARD specific data")
+SET(SALOME_HOMARD_INSTALL_SAMPLES share/salome/homardsamples CACHE PATH
+  "Install path: SALOME HOMARD samples")
+SET(SALOME_HOMARD_INSTALL_TEST ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test CACHE PATH
+    "Install path: SALOME HOMARD Test files")
+SET(SALOME_HOMARD_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/homard" CACHE PATH
+    "Install path: SALOME HOMARD specific data")
+
+MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
+MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
+MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS  SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
+MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
+MARK_AS_ADVANCED(SALOME_INSTALL_AMCONFIG_LOCAL SALOME_INSTALL_DOC)
+MARK_AS_ADVANCED(SALOME_HOMARD_INSTALL_TEST)
+MARK_AS_ADVANCED(SALOME_HOMARD_INSTALL_RES_DATA)
+
+# Accumulate environment variables for HOMARD module
+SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
+                                                 ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
+                                                 ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
+SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
+
+# Sources
+# ========
+
+ADD_SUBDIRECTORY(idl)
+ADD_SUBDIRECTORY(adm_local)
+ADD_SUBDIRECTORY(resources)
+ADD_SUBDIRECTORY(src)
+IF(SALOME_BUILD_DOC)
+  ADD_SUBDIRECTORY(doc)
+ENDIF()
+ADD_SUBDIRECTORY(bin)
+
+# Header configuration
+# ====================
+SALOME_XVERSION(${PROJECT_NAME})
+SALOME_CONFIGURE_FILE(HOMARD_version.h.in HOMARD_version.h INSTALL ${SALOME_INSTALL_HEADERS})
+
+# Configuration export
+# (here only the level 1 prerequisites are exposed)
+# ====================
+INCLUDE(CMakePackageConfigHelpers)
+
+# List of targets in this project we want to make visible to the rest of the world.
+# They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
+SET(_${PROJECT_NAME}_exposed_targets
+  HOMARDImpl HOMARDEngine HOMARD SalomeIDLHOMARD
+)
+
+# Add all targets to the build-tree export set
+EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
+  FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
+
+# Create the configuration files:
+#   - in the build tree:
+
+# Ensure the variables are always defined for the configure:
+SET(SMESH_ROOT_DIR "${SMESH_ROOT_DIR}")
+
+SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
+
+# Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
+# SALOME_CONFIGURE_PREPARE() #For use in the future
+
+CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
+    ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+    INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
+    PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
+    SMESH_ROOT_DIR)
+
+WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+    VERSION ${${PROJECT_NAME_UC}_VERSION}
+    COMPATIBILITY AnyNewerVersion)
+
+# Install the CMake configuration files:
+INSTALL(FILES
+  "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+  "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+  DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
+
+# Install the export set for use with the install-tree
+INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
+  FILE ${PROJECT_NAME}Targets.cmake)
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..b1e3f5a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index e69de29..0000000
index d1873f6fcb03d27121d768f3aa980690b0f909ee..f483f3e0a782f40dc2b88575a16e581fa93da8ed 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #if !defined(__HOMARD_VERSION_H__)
 #define __HOMARD_VERSION_H__
 
-/*
-  HOMARD_VERSION is (major << 16) + (minor << 8) + patch.
+/*!
+  Specify version of SALOME HOMARD module, as follows
+
+  HOMARD_VERSION_MAJOR       : (integer) number identifying major version
+  HOMARD_VERSION_MINOR       : (integer) number identifying minor version
+  HOMARD_VERSION_MAINTENANCE : (integer) number identifying maintenance version
+  HOMARD_VERSION_STR         : (string)  complete version number "major.minor.maintenance"
+  HOMARD_VERSION             : (hex)     complete version number (major << 16) + (minor << 8) + maintenance
+  HOMARD_DEVELOPMENT         : (integer) indicates development version when set to 1
 */
 
-#define HOMARD_VERSION_STR "@VERSION@"
-#define HOMARD_VERSION     @XVERSION@
-#define HOMARD_DEVELOPMENT @VERSION_DEV@
+#define HOMARD_VERSION_MAJOR       @SALOMEHOMARD_MAJOR_VERSION@
+#define HOMARD_VERSION_MINOR       @SALOMEHOMARD_MINOR_VERSION@
+#define HOMARD_VERSION_MAINTENANCE @SALOMEHOMARD_PATCH_VERSION@
+#define HOMARD_VERSION_STR         "@SALOMEHOMARD_VERSION@"
+#define HOMARD_VERSION             @SALOMEHOMARD_XVERSION@
+#define HOMARD_DEVELOPMENT         @SALOMEHOMARD_VERSION_DEV@
 
 #endif // __HOMARD_VERSION_H__
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644 (file)
index 39df698..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# -* Makefile *- 
-# Author : Patrick GOLDBRONN (CEA)
-# Date : 28/06/2001
-# Modified by : Alexander BORODIN (OCN) - autotools usage
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-ACLOCAL_AMFLAGS = -I adm_local/unix/config_files \
-                  -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
-                  -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \
-                 -I ${MED_ROOT_DIR}/adm_local/unix/config_files \
-                 -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files
-                               
-SUBDIRS = idl adm_local resources src bin doc tests
-
-DIST_SUBDIRS = idl adm_local resources src bin doc tests
-
-DISTCLEANFILES = a.out aclocal.m4 configure hack_libtool
-
-salomeinclude_DATA = HOMARD_version.h
-
-EXTRA_DIST +=          \
-       build_configure \
-       clean_configure 
-
-dist-hook:
-       rm -rf `find $(distdir) -name CVS`
-
-usr_docs:
-       (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs)
-
-docs:usr_docs
-
-dev_docs:
-       (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs)
diff --git a/NEWS b/NEWS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/README b/README
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9eef076a19756e1c66a856eb78a208e680b0e9d0 100644 (file)
--- a/README
+++ b/README
@@ -0,0 +1,111 @@
+*******************
+About SALOME Homard
+*******************
+
+SALOME Homard module drives the mesh adaptation inside the SALOME platform.
+
+It is intended to adapt the meshes within the framework of the computer codes
+by finite elements or finite volumes, via the usage of the "homard" utility.
+This utility proceeds by refinement and unrefinement of the two-dimensional
+or three-dimensional meshes. It is conceived to be used independently of the
+computer code with which it is coupled.
+
+For more information please visit the SALOME platform web site:
+
+  <http://www.salome-platform.org/>
+
+=======
+License
+=======
+
+SALOME platform is distributed under the GNU Lesser General Public License.
+See COPYING file for more details.
+
+Also, additional information can be found at SALOME platform web site:
+
+  <http://www.salome-platform.org/downloads/license/>
+
+============
+Installation
+============
+
+--------------
+Pre-requisites
+--------------
+
+SALOME platform relies on a set of third-party softwares; some of them are needed
+at build time only, while other ones are needed in runtime also.
+
+For more information about the pre-requisites please visit SALOME platform web
+site:
+
+* Check Release Notes and Software Requirements of the latest SALOME release at
+
+  <http://www.salome-platform.org/downloads/current-version/>
+
+* Pre-requisites page at SALOME web site:
+
+  <http://www.salome-platform.org/downloads/license/>
+
+Note: SALOME Homard module needs SALOME KERNEL, SALOME GUI, SALOME Geometry and
+SALOME Mesh as pre-requisites.
+
+------------------
+Basic Installation
+------------------
+
+The build procedure of the SALOME platform is implemented with CMake.
+In order to build the module you have to do the following actions: 
+
+1. Set up environment for pre-requisites (see "Pre-requisites" section above).
+
+2. Create a build directory:
+
+   % mkdir HOMARD_BUILD
+
+3. Configure the build procedure:
+
+   % cd HOMARD_BUILD
+   % cmake -DCMAKE_BUILD_TYPE=<mode> -DCMAKE_INSTALL_PREFIX=<installation_directory> <path_to_src_dir>
+
+   where
+   - <mode> is either Release or Debug (default: Release);
+   - <installation_directory> is a destination folder to install SALOME Homard
+      module (default: /usr); 
+   - <path_to_src_dir> is a path to the SALOME Homard sources directory.
+
+   Note: by default (if CMAKE_INSTALL_PREFIX option is not given), SALOME Homard
+   module will be configured for installation to the /usr directory that requires
+   root permissions to complete the installation.
+
+4. Build and install:
+
+   % make
+   % make install
+
+   This will install SALOME Homard module to the <installation_directory>
+   specified to cmake command on the previous step.
+
+-------------------
+Custom installation
+-------------------
+
+SALOME Homard module supports a set of advanced configuration options;
+for more details learn CMakeLists.txt file in the root source directory.
+
+You can also use other options of cmake command to customize your installation.
+Learn more about available options by typing
+
+   % cmake --help
+
+=============
+Documentation
+=============
+
+The directory doc contains additional documentation file of SALOME Homard module.
+
+===============
+Troubleshooting
+===============
+
+Please, send a mail to webmaster.salome@opencascade.com.
diff --git a/SalomeHOMARDConfig.cmake.in b/SalomeHOMARDConfig.cmake.in
new file mode 100644 (file)
index 0000000..7ad0e80
--- /dev/null
@@ -0,0 +1,114 @@
+# Copyright (C) 2013-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# - Config file for the @PROJECT_NAME@ package
+# It defines the following variables. 
+# Specific to the pacakge @PROJECT_NAME@ itself:
+#  @PROJECT_NAME_UC@_ROOT_DIR_EXP - the root path of the installation providing this CMake file
+#
+
+### Initialisation performed by CONFIGURE_PACKAGE_CONFIG_FILE:
+@PACKAGE_INIT@
+
+# Load the dependencies for the libraries of @PROJECT_NAME@ 
+# (contains definitions for IMPORTED targets). This is only 
+# imported if we are not built as a subproject (in this case targets are already there)
+IF(NOT TARGET HOMARDEngine AND NOT @PROJECT_NAME@_BINARY_DIR)
+  INCLUDE("@PACKAGE_SALOME_INSTALL_CMAKE_LOCAL@/@PROJECT_NAME@Targets.cmake")
+ENDIF()   
+
+# Package root dir:
+SET_AND_CHECK(HOMARD_ROOT_DIR_EXP "@PACKAGE_CMAKE_INSTALL_PREFIX@")
+
+# Include directories
+SET_AND_CHECK(HOMARD_INCLUDE_DIRS "${HOMARD_ROOT_DIR_EXP}/@SALOME_INSTALL_HEADERS@")
+SET(HOMARD_INCLUDE_DIRS "${HOMARD_INCLUDE_DIRS};@_SalomeHOMARD_EXTRA_HEADERS@")
+SET(HOMARD_DEFINITIONS "@SMESH_DEFINITIONS@")
+
+# Package specific environment variables
+@_SalomeHOMARD_EXTRA_ENV_FULL@
+
+#### Now the specificities
+
+# Options exported by the package:
+SET(SALOME_HOMARD_BUILD_TESTS @SALOME_BUILD_TESTS@)
+SET(SALOME_HOMARD_BUILD_DOC   @SALOME_BUILD_DOC@)
+
+# Level 1 prerequisites:
+SET_AND_CHECK(SMESH_ROOT_DIR_EXP "@PACKAGE_SMESH_ROOT_DIR@")
+
+# For all prerequisites, load the corresponding targets if the package was used
+# in CONFIG mode. This ensures dependent projects link correctly
+# without having to set LD_LIBRARY_PATH:
+SET(_PREREQ_@PROJECT_NAME@ @_PREREQ_LIST@)
+SET(_PREREQ_@PROJECT_NAME@_CONFIG_DIR @_PREREQ_DIR_LIST@)
+SET(_PREREQ_@PROJECT_NAME@_COMPONENTS "@_PREREQ_COMPO_LIST@")
+LIST(LENGTH _PREREQ_@PROJECT_NAME@_CONFIG_DIR _list_len_@PROJECT_NAME@)
+IF(NOT _list_len_@PROJECT_NAME@ EQUAL 0)
+  # Another CMake stupidity - FOREACH(... RANGE r) generates r+1 numbers ...
+  MATH(EXPR _range_@PROJECT_NAME@ "${_list_len_@PROJECT_NAME@}-1")
+  FOREACH(_p_@PROJECT_NAME@ RANGE ${_range_@PROJECT_NAME@})
+    LIST(GET _PREREQ_@PROJECT_NAME@            ${_p_@PROJECT_NAME@} _pkg_@PROJECT_NAME@    )
+    LIST(GET _PREREQ_@PROJECT_NAME@_CONFIG_DIR ${_p_@PROJECT_NAME@} _pkg_dir_@PROJECT_NAME@)
+    LIST(GET _PREREQ_@PROJECT_NAME@_COMPONENTS ${_p_@PROJECT_NAME@} _pkg_compo_@PROJECT_NAME@)
+    IF(NOT OMIT_DETECT_PACKAGE_${_pkg_@PROJECT_NAME@})
+      MESSAGE(STATUS "===> Reloading targets from ${_pkg_@PROJECT_NAME@} ...")
+      IF(NOT _pkg_compo_@PROJECT_NAME@)
+        FIND_PACKAGE(${_pkg_@PROJECT_NAME@} REQUIRED NO_MODULE
+            PATHS "${_pkg_dir_@PROJECT_NAME@}"
+            NO_DEFAULT_PATH)
+      ELSE()
+        STRING(REPLACE "," ";" _compo_lst_@PROJECT_NAME@ "${_pkg_compo_@PROJECT_NAME@}")
+        MESSAGE(STATUS "===> (components: ${_pkg_compo_@PROJECT_NAME@})")
+        FIND_PACKAGE(${_pkg_@PROJECT_NAME@} REQUIRED NO_MODULE
+            COMPONENTS ${_compo_lst_@PROJECT_NAME@}
+            PATHS "${_pkg_dir_@PROJECT_NAME@}"
+            NO_DEFAULT_PATH)
+      ENDIF()
+    ENDIF()
+  ENDFOREACH()
+ENDIF()
+
+# Installation directories
+SET(SALOME_INSTALL_BINS "@SALOME_INSTALL_BINS@")
+SET(SALOME_INSTALL_LIBS "@SALOME_INSTALL_LIBS@")
+SET(SALOME_INSTALL_IDLS "@SALOME_INSTALL_IDLS@")
+SET(SALOME_INSTALL_HEADERS "@SALOME_INSTALL_HEADERS@")
+SET(SALOME_INSTALL_SCRIPT_SCRIPTS "@SALOME_INSTALL_SCRIPT_SCRIPTS@")
+SET(SALOME_INSTALL_SCRIPT_DATA "@SALOME_INSTALL_SCRIPT_DATA@")
+SET(SALOME_INSTALL_SCRIPT_PYTHON "@SALOME_INSTALL_SCRIPT_PYTHON@")
+SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "@SALOME_INSTALL_APPLISKEL_SCRIPTS@")
+SET(SALOME_INSTALL_APPLISKEL_PYTHON "@SALOME_INSTALL_APPLISKEL_PYTHON@") 
+SET(SALOME_INSTALL_CMAKE_LOCAL "@SALOME_INSTALL_CMAKE_LOCAL@")
+SET(SALOME_INSTALL_PYTHON "@SALOME_INSTALL_PYTHON@")
+SET(SALOME_INSTALL_PYTHON_SHARED "@SALOME_INSTALL_PYTHON_SHARED@")
+SET(SALOME_INSTALL_RES "@SALOME_INSTALL_RES@")
+SET(SALOME_INSTALL_DOC "@SALOME_INSTALL_DOC@")
+SET(SALOME_INSTALL_AMCONFIG_LOCAL "@SALOME_INSTALL_AMCONFIG_LOCAL@")
+
+# Include SMESH targets if they were not already loaded:
+IF(NOT (TARGET SMESHEngine)) 
+  INCLUDE("${SMESH_ROOT_DIR_EXP}/${SALOME_INSTALL_CMAKE}/SalomeSMESHTargets.cmake")
+ENDIF()
+
+# Exposed HOMARD targets:
+SET(HOMARD_HOMARDImpl HOMARDImpl)
+SET(HOMARD_HOMARDEngine HOMARDEngine)
+SET(HOMARD_HOMARD HOMARD)
+SET(HOMARD_SalomeIDLHOMARD SalomeIDLHOMARD)
diff --git a/adm_local/CMakeLists.txt b/adm_local/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..4df2dc0
--- /dev/null
@@ -0,0 +1,20 @@
+# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+ADD_SUBDIRECTORY(unix)
diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am
deleted file mode 100644 (file)
index 88aeda6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-SUBDIRS = unix
diff --git a/adm_local/unix/CMakeLists.txt b/adm_local/unix/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..90c9fba
--- /dev/null
@@ -0,0 +1,20 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+ADD_SUBDIRECTORY(config_files)
diff --git a/adm_local/unix/Makefile.am b/adm_local/unix/Makefile.am
deleted file mode 100644 (file)
index 328edad..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-SUBDIRS = config_files
diff --git a/adm_local/unix/config_files/CMakeLists.txt b/adm_local/unix/config_files/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..764677a
--- /dev/null
@@ -0,0 +1,26 @@
+# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SET(_m4_data
+  check_GUI.m4
+  check_Med2.m4
+  check_sphinx.m4
+)
+
+INSTALL(FILES ${_m4_data} DESTINATION ${SALOME_INSTALL_AMCONFIG_LOCAL}/config_files)
diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am
deleted file mode 100644 (file)
index edbfd5b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-dist_admlocalm4_DATA = \
-check_GUI.m4 \
-check_Med2.m4 \
-check_sphinx.m4
diff --git a/adm_local/unix/config_files/README b/adm_local/unix/config_files/README
deleted file mode 100644 (file)
index e69de29..0000000
index 8907e15ebaa44c8642ee0d1d935185b5af24bf2e..ac8d14dfe90b24974b60a0c893526014e5ecd278 100755 (executable)
@@ -1,9 +1,9 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
index bd8f7deb4bb3d0db4f73758bcbc1700b250c4e88..901ef21808ea766c2ecb2a2132287e5c5fc4cee8 100644 (file)
@@ -1,9 +1,9 @@
-dnl Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+dnl Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 dnl
 dnl This library is free software; you can redistribute it and/or
 dnl modify it under the terms of the GNU Lesser General Public
 dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License.
+dnl version 2.1 of the License, or (at your option) any later version.
 dnl
 dnl This library is distributed in the hope that it will be useful,
 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
index 91bb85735249c0e4848e8c947fcd14e14d96dcd3..b33007cb1e0c2f1df954d0fb790f7d971f3614f2 100644 (file)
@@ -1,9 +1,9 @@
-dnl Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+dnl Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 dnl
 dnl This library is free software; you can redistribute it and/or
 dnl modify it under the terms of the GNU Lesser General Public
 dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License.
+dnl version 2.1 of the License, or (at your option) any later version.
 dnl
 dnl This library is distributed in the hope that it will be useful,
 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am
deleted file mode 100644 (file)
index e76403b..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# ============================================================
-# This file defines the common definitions used in several
-# Makefile. This file must be included, if needed, by the file
-# Makefile.am.
-# ============================================================
-# Standard directory for installation
-#
-salomeincludedir   = $(includedir)/salome
-libdir             = $(prefix)/lib@LIB_LOCATION_SUFFIX@/salome
-bindir             = $(prefix)/bin/salome
-salomescriptdir    = $(bindir)
-salomepythondir    = $(pythondir)/salome
-salomepyexecdir    = $(pyexecdir)/salome
-
-# Directory for installing idl files
-salomeidldir       = $(prefix)/idl/salome
-
-# Directory for installing resource files
-salomeresdir       = $(prefix)/share/salome/resources/@MODULE_NAME@
-
-# Directories for installing admin files
-admlocaldir        = $(prefix)/adm_local
-admlocalunixdir    = $(admlocaldir)/unix
-admlocalm4dir      = $(admlocaldir)/unix/config_files
-
-# Shared modules installation directory
-sharedpkgpythondir = $(salomepythondir)/shared_modules
-
-# Documentation directory
-docdir             = $(datadir)/doc/salome
-
-# common rules
-
-# meta object implementation files generation (moc)
-%_moc.cxx: %.h
-       $(MOC) $< -o $@
-
-# translation (*.qm) files generation (lrelease)
-%.qm: %.ts
-       $(LRELEASE) $< -qm $@
-
-# resource files generation (qrcc)
-qrc_%.cxx: %.qrc
-       $(QRCC) $< -o $@ -name $(*F)
-
-# qt forms files generation (uic)
-ui_%.h: %.ui
-       $(UIC) -o $@ $<
-
-# extra distributed files
-EXTRA_DIST = $(MOC_FILES:%_moc.cxx=%.h) $(QRC_FILES:qrc_%.cxx=%.qrc) \
-             $(UIC_FILES:ui_%.h=%.ui) $(nodist_salomeres_DATA:%.qm=%.ts)
-
-# customize clean operation
-mostlyclean-local:
-       rm -f @builddir@/*_moc.cxx
-       rm -f @builddir@/*.qm
-       rm -f @builddir@/ui_*.h
-       rm -f @builddir@/qrc_*.cxx
-
-# tests
-tests: unittest
-
-unittest: $(UNIT_TEST_PROG)
-       @if test "x$(UNIT_TEST_PROG)" != "x"; then \
-           $(UNIT_TEST_PROG);                     \
-       fi;
diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..b51d883
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${SALOME_INSTALL_BINS})
+SALOME_CONFIGURE_FILE(runHOMARD.in runHOMARD INSTALL ${SALOME_INSTALL_BINS})
+
+# ===============================================================
+# Files to be installed
+# ===============================================================
+
+SET(_bin_scripts
+  runHOMARD.py
+)
+
+SALOME_INSTALL_SCRIPTS("${_bin_scripts}" ${SALOME_INSTALL_SCRIPT_SCRIPTS})
diff --git a/bin/Makefile.am b/bin/Makefile.am
deleted file mode 100644 (file)
index 4a6b36b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-nodist_salomescript_DATA = \
-       VERSION
index 9cdb47618886210ce779566e4f7330c7ba7f4d10..f2923eaa0da18f8d117d09d209629c4415bce7f7 100644 (file)
@@ -1,3 +1,3 @@
-[SALOME HOMARD] : @VERSION@
-[DEVELOPMENT]   : @VERSION_DEV@
+[SALOME HOMARD] : @SALOMEHOMARD_VERSION@
+[DEVELOPMENT]   : @SALOMEHOMARD_VERSION_DEV@
 
diff --git a/bin/runAppli.in b/bin/runAppli.in
deleted file mode 100755 (executable)
index 16b7fb5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-export KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@
-export PYHELLO_ROOT_DIR=@prefix@
-
-python -i $PYHELLO_ROOT_DIR/bin/salome/runSalome.py --modules=PYHELLO --xterm --containers=cpp,python --killall
-
-
diff --git a/bin/runHOMARD.in b/bin/runHOMARD.in
new file mode 100755 (executable)
index 0000000..ecb5114
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+if [ -z "${KERNEL_ROOT_DIR}" ] ; then 
+export KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@
+fi
+if [ -z "${HOMARD_ROOT_DIR}" ] ; then 
+export HOMARD_ROOT_DIR=@CMAKE_INSTALL_PREFIX@
+fi
+
+${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python -i ${HOMARD_ROOT_DIR}/bin/salome/runHOMARD.py --modules=HOMARD --xterm --containers=cpp,python --killall
+
+
diff --git a/bin/runHOMARD.py b/bin/runHOMARD.py
new file mode 100755 (executable)
index 0000000..1a2c4d9
--- /dev/null
@@ -0,0 +1,524 @@
+#!/usr/bin/env python
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+usage="""USAGE: runHOMARD.py [options]
+
+[command line options] :
+--help                        : affichage de l'aide
+--gui                         : lancement du GUI
+--logger                     : redirection des messages dans un fichier
+--xterm                              : les serveurs ouvrent une fenêtre xterm et les messages sont affichés dans cette fenêtre
+--modules=module1,module2,... : où modulen est le nom d'un module Salome à charger dans le catalogue
+--containers=cpp,python,superv: lancement des containers cpp, python et de supervision
+--killall                    : arrêt des serveurs de salome
+
+ La variable d'environnement <modulen>_ROOT_DIR doit etre préalablement
+ positionnée (modulen doit etre en majuscule).
+ KERNEL_ROOT_DIR est obligatoire.
+"""
+
+# -----------------------------------------------------------------------------
+#
+# Fonction d'arrêt de salome
+#
+
+def killSalome():
+   print "arret des serveurs SALOME"
+   for pid, cmd in process_id.items():
+      print "arret du process %s : %s"% (pid, cmd[0])
+      try:
+       os.kill(pid,signal.SIGKILL)
+      except:
+         print "  ------------------ process %s : %s inexistant"% (pid, cmd[0])
+   print "arret du naming service"
+   os.system("killall -9 omniNames")
+   
+# -----------------------------------------------------------------------------
+#
+# Fonction message
+#
+
+def message(code, msg=''):
+    if msg: print msg
+    sys.exit(code)
+
+import sys,os,string,glob,time,signal,pickle,getopt
+
+init_time=os.times()
+opts, args=getopt.getopt(sys.argv[1:], 'hmglxck:', ['help','modules=','gui','logger','xterm','containers=','killall'])
+modules_root_dir={}
+process_id={}
+liste_modules={}
+liste_containers={}
+with_gui=0
+with_logger=0
+with_xterm=0
+
+with_container_cpp=0
+with_container_python=0
+with_container_superv=0
+
+try:
+  for o, a in opts:
+    if o in ('-h', '--help'):
+      print usage
+      sys.exit(1)
+    elif o in ('-g', '--gui'):
+      with_gui=1
+    elif o in ('-l', '--logger'):
+      with_logger=1
+    elif o in ('-x', '--xterm'):
+      with_xterm=1
+    elif o in ('-m', '--modules'):
+      liste_modules = [x.upper() for x in a.split(',')]
+    elif o in ('-c', '--containers'):
+      liste_containers = [x.lower() for x in a.split(',')]
+      for r in liste_containers:
+        if r not in ('cpp', 'python', 'superv'):
+          message(1, 'Invalid -c/--containers option: %s' % a)
+      if 'cpp' in liste_containers:
+          with_container_cpp=1
+      else:
+          with_container_cpp=0
+      if 'python' in liste_containers:
+          with_container_python=1
+      else:
+          with_container_python=0
+      if 'superv' in liste_containers:
+          with_container_superv=1
+      else:
+          with_container_superv=0
+    elif o in ('-k', '--killall'):
+      filedict='/tmp/'+os.getenv('USER')+'_SALOME_pidict'
+      #filedict='/tmp/'+os.getlogin()+'_SALOME_pidict'
+      found = 0
+      try:
+         fpid=open(filedict, 'r')
+        found = 1
+      except:
+         print "le fichier %s des process SALOME n'est pas accessible"% filedict
+
+      if found:
+         process_id=pickle.load(fpid)
+         fpid.close()
+         killSalome()
+        process_id={}
+         os.remove(filedict)
+       
+except getopt.error, msg:
+  print usage
+  sys.exit(1)
+
+# -----------------------------------------------------------------------------
+#
+# Vérification des variables d'environnement
+#
+try:
+  kernel_root_dir=os.environ["KERNEL_ROOT_DIR"]
+  modules_root_dir["KERNEL"]=kernel_root_dir
+except:
+  print usage
+  sys.exit(1)
+
+for module in liste_modules :
+   try:
+      module=module.upper()
+      module_root_dir=os.environ[module +"_ROOT_DIR"]
+      modules_root_dir[module]=module_root_dir
+   except:
+      print usage
+      sys.exit(1)
+
+# il faut KERNEL en premier dans la liste des modules
+# - l'ordre des modules dans le catalogue sera identique
+# - la liste des modules presents dans le catalogue est exploitée pour charger les modules CORBA python,
+#   il faut charger les modules python du KERNEL en premier
+
+if "KERNEL" in liste_modules:liste_modules.remove("KERNEL")
+liste_modules[:0]=["KERNEL"]
+#print liste_modules
+#print modules_root_dir
+
+os.environ["SALOMEPATH"]=":".join(modules_root_dir.values())
+if "SUPERV" in liste_modules:with_container_superv=1
+
+
+# -----------------------------------------------------------------------------
+#
+# Définition des classes d'objets pour le lancement des Server CORBA
+#
+
+class Server:
+   CMD=[]
+   if with_xterm:
+       ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-e']
+   else:
+       ARGS=[] 
+
+   def run(self):
+      args = self.ARGS+self.CMD
+      #print "args = ", args
+      pid = os.spawnvp(os.P_NOWAIT, args[0], args)
+      process_id[pid]=self.CMD
+
+class CatalogServer(Server):
+   SCMD1=['SALOME_ModuleCatalog_Server','-common']
+   SCMD2=['-personal','${HOME}/Salome/resources/CatalogModulePersonnel.xml'] 
+
+   def setpath(self,liste_modules):
+      cata_path=[]
+      for module in liste_modules:
+          module_root_dir=modules_root_dir[module]
+          module_cata=module+"Catalog.xml"
+          print "   ", module_cata
+          cata_path.extend(glob.glob(os.path.join(module_root_dir,"share","salome","resources",module_cata)))
+      self.CMD=self.SCMD1 + [string.join(cata_path,':')] + self.SCMD2
+
+class SalomeDSServer(Server):
+   CMD=['SALOMEDS_Server']
+
+class RegistryServer(Server):
+   CMD=['SALOME_Registry_Server', '--salome_session','theSession']
+
+class ContainerCPPServer(Server):
+   CMD=['SALOME_Container','FactoryServer','-ORBInitRef','NameService=corbaname::localhost']
+
+class ContainerPYServer(Server):
+   CMD=['SALOME_ContainerPy.py','FactoryServerPy','-ORBInitRef','NameService=corbaname::localhost']
+
+class ContainerSUPERVServer(Server):
+   CMD=['SALOME_Container','SuperVisionContainer','-ORBInitRef','NameService=corbaname::localhost']
+
+class LoggerServer(Server):
+   CMD=['SALOME_Logger_Server', 'logger.log']
+
+class SessionLoader(Server):
+   CMD=['SALOME_Session_Loader']
+   if with_container_cpp:
+       CMD=CMD+['CPP']
+   if with_container_python:
+       CMD=CMD+['PY']
+   if with_container_superv:
+       CMD=CMD+['SUPERV']
+   if with_gui:
+       CMD=CMD+['GUI']
+
+class SessionServer(Server):
+   CMD=['SALOME_Session_Server']
+
+class NotifyServer(Server):
+   CMD=['notifd','-c','${KERNEL_ROOT_DIR}/share/salome/resources/channel.cfg -DFactoryIORFileName=/tmp/${LOGNAME}_rdifact.ior -DChannelIORFileName=/tmp/${LOGNAME}_rdichan.ior']
+
+# -----------------------------------------------------------------------------
+#
+# Fonction de test
+#
+
+def test(clt):
+   """
+        Test function that creates an instance of PYHELLO component
+        usage : pyhello=test(clt)
+   """
+   # create an LifeCycleCORBA instance
+   import LifeCycleCORBA 
+   lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb)
+   import PYHELLO_ORB
+   pyhello = lcc.FindOrLoadComponent("FactoryServerPy", "PYHELLO")
+   return pyhello
+
+# -----------------------------------------------------------------------------
+#
+# Fonctions helper pour ajouter des variables d'environnement
+#
+
+def add_path(directory):
+   os.environ["PATH"]=directory + ":" + os.environ["PATH"]
+
+def add_ld_library_path(directory):
+   os.environ["LD_LIBRARY_PATH"]=directory + ":" + os.environ["LD_LIBRARY_PATH"]
+
+def add_python_path(directory):
+   os.environ["PYTHONPATH"]=directory + ":" + os.environ["PYTHONPATH"]
+   sys.path[:0]=[directory]
+
+# -----------------------------------------------------------------------------
+#
+# initialisation des variables d'environnement
+#
+
+python_version="python%d.%d" % sys.version_info[0:2]
+
+#
+# Ajout du chemin d'acces aux executables de KERNEL dans le PATH
+#
+
+add_path(os.path.join(kernel_root_dir,"bin","salome"))
+#print "PATH=",os.environ["PATH"]
+
+#
+# Ajout des modules dans le LD_LIBRARY_PATH
+#
+for module in liste_modules:
+    module_root_dir=modules_root_dir[module]
+    add_ld_library_path(os.path.join(module_root_dir,"lib","salome"))
+#print "LD_LIBRARY_PATH=",os.environ["LD_LIBRARY_PATH"]
+
+#
+# Ajout des modules dans le PYTHONPATH (KERNEL prioritaire, donc en dernier)
+#
+
+liste_modules_reverse=liste_modules[:]
+liste_modules_reverse.reverse()
+#print liste_modules
+#print liste_modules_reverse
+for module in liste_modules_reverse:
+    module_root_dir=modules_root_dir[module]
+    add_python_path(os.path.join(module_root_dir,"bin","salome"))
+    add_python_path(os.path.join(module_root_dir,"lib",python_version,"site-packages","salome"))
+    add_python_path(os.path.join(module_root_dir,"lib","salome"))
+    add_python_path(os.path.join(module_root_dir,"lib",python_version,"site-packages","salome","shared_modules"))
+
+#print "PYTHONPATH=",sys.path
+
+import orbmodule
+
+#
+# -----------------------------------------------------------------------------
+#
+
+def startGUI():
+  import SALOME
+  session=clt.waitNS("/Kernel/Session",SALOME.Session)
+
+  #
+  # Activation du GUI de Session Server
+  #
+       
+  session.GetInterface()
+  
+#
+# -----------------------------------------------------------------------------
+#
+
+def startSalome():
+
+  #
+  # Lancement Session Loader
+  #
+  SessionLoader().run()
+
+  #
+  # Initialisation ORB et Naming Service
+  #
+  clt=orbmodule.client()
+
+  # (non obligatoire) Lancement Logger Server et attente de sa 
+  #  disponibilite dans le naming service
+  #
+  if with_logger:
+       LoggerServer().run()
+       clt.waitLogger("Logger")
+
+  #
+  # Lancement Registry Server
+  #
+  RegistryServer().run()
+
+  #
+  # Attente de la disponibilité du Registry dans le Naming Service
+  #
+  clt.waitNS("/Registry")
+
+  #
+  # Lancement Catalog Server
+  #
+  cataServer=CatalogServer()
+  cataServer.setpath(liste_modules)
+  cataServer.run()
+
+  #
+  # Attente de la disponibilité du Catalog Server dans le Naming Service
+  #
+  import SALOME_ModuleCatalog
+  clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
+
+  #
+  # Lancement SalomeDS Server
+  #
+  os.environ["CSF_PluginDefaults"]=os.path.join(kernel_root_dir,"share","salome","resources")
+  os.environ["CSF_SALOMEDS_ResourcesDefaults"]=os.path.join(kernel_root_dir,"share","salome","resources")
+  SalomeDSServer().run()
+
+  if "GEOM" in liste_modules:
+       print "GEOM OCAF Resources"
+       os.environ["CSF_GEOMDS_ResourcesDefaults"]=os.path.join(modules_root_dir["GEOM"],"share","salome","resources")
+
+
+  #
+  # Attente de la disponibilité du SalomeDS dans le Naming Service
+  #
+  clt.waitNS("/myStudyManager")
+
+  #
+  # Lancement Session Server
+  #
+  SessionServer().run()
+
+  #
+  # Attente de la disponibilité du Session Server dans le Naming Service
+  #
+  import SALOME
+  session=clt.waitNS("/Kernel/Session",SALOME.Session)
+
+  #
+  # Lancement containers
+  #
+  theComputer = os.getenv("HOSTNAME")
+  theComputer = theComputer.split('.')[0]
+
+  #
+  # Lancement Container C++ local
+  #
+  if with_container_cpp:
+         ContainerCPPServer().run()
+         #
+         # Attente de la disponibilité du Container C++ local 
+          # dans le Naming Service
+         #
+         clt.waitNS("/Containers/" + theComputer + "/FactoryServer")
+  #
+  # Lancement Container Python local
+  #
+  if with_container_python:
+         ContainerPYServer().run()
+         #
+         # Attente de la disponibilité du Container Python local 
+          #  dans le Naming Service
+         #
+         clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy")
+
+  if with_container_superv:
+       #
+       # Lancement Container Supervision local
+       #
+       ContainerSUPERVServer().run()
+       #
+       # Attente de la disponibilité du Container Supervision local 
+        # dans le Naming Service
+       #
+       clt.waitNS("/Containers/" + theComputer + "/SuperVisionContainer")
+  #
+  # Activation du GUI de Session Server
+  #
+  #session.GetInterface()
+
+  end_time = os.times()
+  print
+  print "Start SALOME, elpased time : %5.1f seconds"% (end_time[4] - init_time[4])
+
+  return clt
+
+#
+# -----------------------------------------------------------------------------
+#
+
+if __name__ == "__main__":
+   clt=None
+   try:
+      clt = startSalome()
+   except:
+      print
+      print
+      print "--- erreur au lancement Salome ---"
+   
+   #print process_id
+   
+   
+   filedict='/tmp/'+os.getenv('USER')+'_SALOME_pidict'
+   #filedict='/tmp/'+os.getlogin()+'_SALOME_pidict'
+   
+   fpid=open(filedict, 'w')
+   pickle.dump(process_id,fpid)
+   fpid.close()
+   
+   print """
+
+Sauvegarde du dictionnaire des process dans , %s
+Pour tuer les process SALOME, executer : python killSalome.py depuis
+une console, ou bien killSalome() depuis le present interpreteur,
+s'il n'est pas fermé.
+
+runHOMARD, avec l'option --killall, commence par tuer les process restants 
+d'une execution précédente.
+
+Pour lancer uniquement le GUI, executer startGUI() depuis le present interpreteur,
+s'il n'est pas fermé.
+
+""" % filedict
+   
+   #
+   #  Impression arborescence Naming Service
+   #
+   
+   if clt != None:
+     print
+     print " --- registered objects tree in Naming Service ---"
+     clt.showNS()
+     session=clt.waitNS("/Kernel/Session")
+     catalog=clt.waitNS("/Kernel/ModulCatalog")
+     import socket
+     container =  clt.waitNS("/Containers/" + socket.gethostname().split('.')[0] + "/FactoryServerPy")
+   
+   if os.path.isfile("~/.salome/pystartup"):
+      f=open(os.path.expanduser("~/.salome/pystartup"),'w')
+      PYTHONSTARTUP=f.read()
+      f.close()
+   else:
+      PYTHONSTARTUP="""
+# Add auto-completion and a stored history file of commands to your Python
+# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
+# bound to the TAB key by default (you can change it - see readline docs).
+#
+# Store the history in ~/.salome/pyhistory, 
+#
+import atexit
+import os
+import readline
+import rlcompleter
+readline.parse_and_bind('tab: complete')
+
+historyPath = os.path.expanduser("~/.salome/pyhistory")
+
+def save_history(historyPath=historyPath):
+    import readline
+    readline.write_history_file(historyPath)
+
+if os.path.exists(historyPath):
+    readline.read_history_file(historyPath)
+
+atexit.register(save_history)
+del os, atexit, readline, rlcompleter, save_history, historyPath
+"""
+      f=open(os.path.expanduser("~/.salome/pystartup"),'w')
+      f.write(PYTHONSTARTUP)
+      f.close()
+
+   exec PYTHONSTARTUP in {}
+   
diff --git a/bin/runSalome.py b/bin/runSalome.py
deleted file mode 100755 (executable)
index f481b36..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-#!/usr/bin/env python
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-usage="""USAGE: runSalome.py [options]
-
-[command line options] :
---help                        : affichage de l'aide
---gui                         : lancement du GUI
---logger                     : redirection des messages dans un fichier
---xterm                              : les serveurs ouvrent une fenêtre xterm et les messages sont affichés dans cette fenêtre
---modules=module1,module2,... : où modulen est le nom d'un module Salome à charger dans le catalogue
---containers=cpp,python,superv: lancement des containers cpp, python et de supervision
---killall                    : arrêt des serveurs de salome
-
- La variable d'environnement <modulen>_ROOT_DIR doit etre préalablement
- positionnée (modulen doit etre en majuscule).
- KERNEL_ROOT_DIR est obligatoire.
-"""
-
-# -----------------------------------------------------------------------------
-#
-# Fonction d'arrêt de salome
-#
-
-def killSalome():
-   print "arret des serveurs SALOME"
-   for pid, cmd in process_id.items():
-      print "arret du process %s : %s"% (pid, cmd[0])
-      try:
-       os.kill(pid,signal.SIGKILL)
-      except:
-         print "  ------------------ process %s : %s inexistant"% (pid, cmd[0])
-   print "arret du naming service"
-   os.system("killall -9 omniNames")
-   
-# -----------------------------------------------------------------------------
-#
-# Fonction message
-#
-
-def message(code, msg=''):
-    if msg: print msg
-    sys.exit(code)
-
-import sys,os,string,glob,time,signal,pickle,getopt
-
-init_time=os.times()
-opts, args=getopt.getopt(sys.argv[1:], 'hmglxck:', ['help','modules=','gui','logger','xterm','containers=','killall'])
-modules_root_dir={}
-process_id={}
-liste_modules={}
-liste_containers={}
-with_gui=0
-with_logger=0
-with_xterm=0
-
-with_container_cpp=0
-with_container_python=0
-with_container_superv=0
-
-try:
-  for o, a in opts:
-    if o in ('-h', '--help'):
-      print usage
-      sys.exit(1)
-    elif o in ('-g', '--gui'):
-      with_gui=1
-    elif o in ('-l', '--logger'):
-      with_logger=1
-    elif o in ('-x', '--xterm'):
-      with_xterm=1
-    elif o in ('-m', '--modules'):
-      liste_modules = [x.upper() for x in a.split(',')]
-    elif o in ('-c', '--containers'):
-      liste_containers = [x.lower() for x in a.split(',')]
-      for r in liste_containers:
-        if r not in ('cpp', 'python', 'superv'):
-          message(1, 'Invalid -c/--containers option: %s' % a)
-      if 'cpp' in liste_containers:
-          with_container_cpp=1
-      else:
-          with_container_cpp=0
-      if 'python' in liste_containers:
-          with_container_python=1
-      else:
-          with_container_python=0
-      if 'superv' in liste_containers:
-          with_container_superv=1
-      else:
-          with_container_superv=0
-    elif o in ('-k', '--killall'):
-      filedict='/tmp/'+os.getenv('USER')+'_SALOME_pidict'
-      #filedict='/tmp/'+os.getlogin()+'_SALOME_pidict'
-      found = 0
-      try:
-         fpid=open(filedict, 'r')
-        found = 1
-      except:
-         print "le fichier %s des process SALOME n'est pas accessible"% filedict
-
-      if found:
-         process_id=pickle.load(fpid)
-         fpid.close()
-         killSalome()
-        process_id={}
-         os.remove(filedict)
-       
-except getopt.error, msg:
-  print usage
-  sys.exit(1)
-
-# -----------------------------------------------------------------------------
-#
-# Vérification des variables d'environnement
-#
-try:
-  kernel_root_dir=os.environ["KERNEL_ROOT_DIR"]
-  modules_root_dir["KERNEL"]=kernel_root_dir
-except:
-  print usage
-  sys.exit(1)
-
-for module in liste_modules :
-   try:
-      module=module.upper()
-      module_root_dir=os.environ[module +"_ROOT_DIR"]
-      modules_root_dir[module]=module_root_dir
-   except:
-      print usage
-      sys.exit(1)
-
-# il faut KERNEL en premier dans la liste des modules
-# - l'ordre des modules dans le catalogue sera identique
-# - la liste des modules presents dans le catalogue est exploitée pour charger les modules CORBA python,
-#   il faut charger les modules python du KERNEL en premier
-
-if "KERNEL" in liste_modules:liste_modules.remove("KERNEL")
-liste_modules[:0]=["KERNEL"]
-#print liste_modules
-#print modules_root_dir
-
-os.environ["SALOMEPATH"]=":".join(modules_root_dir.values())
-if "SUPERV" in liste_modules:with_container_superv=1
-
-
-# -----------------------------------------------------------------------------
-#
-# Définition des classes d'objets pour le lancement des Server CORBA
-#
-
-class Server:
-   CMD=[]
-   if with_xterm:
-       ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-e']
-   else:
-       ARGS=[] 
-
-   def run(self):
-      args = self.ARGS+self.CMD
-      #print "args = ", args
-      pid = os.spawnvp(os.P_NOWAIT, args[0], args)
-      process_id[pid]=self.CMD
-
-class CatalogServer(Server):
-   SCMD1=['SALOME_ModuleCatalog_Server','-common']
-   SCMD2=['-personal','${HOME}/Salome/resources/CatalogModulePersonnel.xml'] 
-
-   def setpath(self,liste_modules):
-      cata_path=[]
-      for module in liste_modules:
-          module_root_dir=modules_root_dir[module]
-          module_cata=module+"Catalog.xml"
-          print "   ", module_cata
-          cata_path.extend(glob.glob(os.path.join(module_root_dir,"share","salome","resources",module_cata)))
-      self.CMD=self.SCMD1 + [string.join(cata_path,':')] + self.SCMD2
-
-class SalomeDSServer(Server):
-   CMD=['SALOMEDS_Server']
-
-class RegistryServer(Server):
-   CMD=['SALOME_Registry_Server', '--salome_session','theSession']
-
-class ContainerCPPServer(Server):
-   CMD=['SALOME_Container','FactoryServer','-ORBInitRef','NameService=corbaname::localhost']
-
-class ContainerPYServer(Server):
-   CMD=['SALOME_ContainerPy.py','FactoryServerPy','-ORBInitRef','NameService=corbaname::localhost']
-
-class ContainerSUPERVServer(Server):
-   CMD=['SALOME_Container','SuperVisionContainer','-ORBInitRef','NameService=corbaname::localhost']
-
-class LoggerServer(Server):
-   CMD=['SALOME_Logger_Server', 'logger.log']
-
-class SessionLoader(Server):
-   CMD=['SALOME_Session_Loader']
-   if with_container_cpp:
-       CMD=CMD+['CPP']
-   if with_container_python:
-       CMD=CMD+['PY']
-   if with_container_superv:
-       CMD=CMD+['SUPERV']
-   if with_gui:
-       CMD=CMD+['GUI']
-
-class SessionServer(Server):
-   CMD=['SALOME_Session_Server']
-
-class NotifyServer(Server):
-   CMD=['notifd','-c','${KERNEL_ROOT_DIR}/share/salome/resources/channel.cfg -DFactoryIORFileName=/tmp/${LOGNAME}_rdifact.ior -DChannelIORFileName=/tmp/${LOGNAME}_rdichan.ior']
-
-# -----------------------------------------------------------------------------
-#
-# Fonction de test
-#
-
-def test(clt):
-   """
-        Test function that creates an instance of PYHELLO component
-        usage : pyhello=test(clt)
-   """
-   # create an LifeCycleCORBA instance
-   import LifeCycleCORBA 
-   lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb)
-   import PYHELLO_ORB
-   pyhello = lcc.FindOrLoadComponent("FactoryServerPy", "PYHELLO")
-   return pyhello
-
-# -----------------------------------------------------------------------------
-#
-# Fonctions helper pour ajouter des variables d'environnement
-#
-
-def add_path(directory):
-   os.environ["PATH"]=directory + ":" + os.environ["PATH"]
-
-def add_ld_library_path(directory):
-   os.environ["LD_LIBRARY_PATH"]=directory + ":" + os.environ["LD_LIBRARY_PATH"]
-
-def add_python_path(directory):
-   os.environ["PYTHONPATH"]=directory + ":" + os.environ["PYTHONPATH"]
-   sys.path[:0]=[directory]
-
-# -----------------------------------------------------------------------------
-#
-# initialisation des variables d'environnement
-#
-
-python_version="python%d.%d" % sys.version_info[0:2]
-
-#
-# Ajout du chemin d'acces aux executables de KERNEL dans le PATH
-#
-
-add_path(os.path.join(kernel_root_dir,"bin","salome"))
-#print "PATH=",os.environ["PATH"]
-
-#
-# Ajout des modules dans le LD_LIBRARY_PATH
-#
-for module in liste_modules:
-    module_root_dir=modules_root_dir[module]
-    add_ld_library_path(os.path.join(module_root_dir,"lib","salome"))
-#print "LD_LIBRARY_PATH=",os.environ["LD_LIBRARY_PATH"]
-
-#
-# Ajout des modules dans le PYTHONPATH (KERNEL prioritaire, donc en dernier)
-#
-
-liste_modules_reverse=liste_modules[:]
-liste_modules_reverse.reverse()
-#print liste_modules
-#print liste_modules_reverse
-for module in liste_modules_reverse:
-    module_root_dir=modules_root_dir[module]
-    add_python_path(os.path.join(module_root_dir,"bin","salome"))
-    add_python_path(os.path.join(module_root_dir,"lib",python_version,"site-packages","salome"))
-    add_python_path(os.path.join(module_root_dir,"lib","salome"))
-    add_python_path(os.path.join(module_root_dir,"lib",python_version,"site-packages","salome","shared_modules"))
-
-#print "PYTHONPATH=",sys.path
-
-import orbmodule
-
-#
-# -----------------------------------------------------------------------------
-#
-
-def startGUI():
-  import SALOME
-  session=clt.waitNS("/Kernel/Session",SALOME.Session)
-
-  #
-  # Activation du GUI de Session Server
-  #
-       
-  session.GetInterface()
-  
-#
-# -----------------------------------------------------------------------------
-#
-
-def startSalome():
-
-  #
-  # Lancement Session Loader
-  #
-  SessionLoader().run()
-
-  #
-  # Initialisation ORB et Naming Service
-  #
-  clt=orbmodule.client()
-
-  # (non obligatoire) Lancement Logger Server et attente de sa 
-  #  disponibilite dans le naming service
-  #
-  if with_logger:
-       LoggerServer().run()
-       clt.waitLogger("Logger")
-
-  #
-  # Lancement Registry Server
-  #
-  RegistryServer().run()
-
-  #
-  # Attente de la disponibilité du Registry dans le Naming Service
-  #
-  clt.waitNS("/Registry")
-
-  #
-  # Lancement Catalog Server
-  #
-  cataServer=CatalogServer()
-  cataServer.setpath(liste_modules)
-  cataServer.run()
-
-  #
-  # Attente de la disponibilité du Catalog Server dans le Naming Service
-  #
-  import SALOME_ModuleCatalog
-  clt.waitNS("/Kernel/ModulCatalog",SALOME_ModuleCatalog.ModuleCatalog)
-
-  #
-  # Lancement SalomeDS Server
-  #
-  os.environ["CSF_PluginDefaults"]=os.path.join(kernel_root_dir,"share","salome","resources")
-  os.environ["CSF_SALOMEDS_ResourcesDefaults"]=os.path.join(kernel_root_dir,"share","salome","resources")
-  SalomeDSServer().run()
-
-  if "GEOM" in liste_modules:
-       print "GEOM OCAF Resources"
-       os.environ["CSF_GEOMDS_ResourcesDefaults"]=os.path.join(modules_root_dir["GEOM"],"share","salome","resources")
-
-
-  #
-  # Attente de la disponibilité du SalomeDS dans le Naming Service
-  #
-  clt.waitNS("/myStudyManager")
-
-  #
-  # Lancement Session Server
-  #
-  SessionServer().run()
-
-  #
-  # Attente de la disponibilité du Session Server dans le Naming Service
-  #
-  import SALOME
-  session=clt.waitNS("/Kernel/Session",SALOME.Session)
-
-  #
-  # Lancement containers
-  #
-  theComputer = os.getenv("HOSTNAME")
-  theComputer = theComputer.split('.')[0]
-
-  #
-  # Lancement Container C++ local
-  #
-  if with_container_cpp:
-         ContainerCPPServer().run()
-         #
-         # Attente de la disponibilité du Container C++ local 
-          # dans le Naming Service
-         #
-         clt.waitNS("/Containers/" + theComputer + "/FactoryServer")
-  #
-  # Lancement Container Python local
-  #
-  if with_container_python:
-         ContainerPYServer().run()
-         #
-         # Attente de la disponibilité du Container Python local 
-          #  dans le Naming Service
-         #
-         clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy")
-
-  if with_container_superv:
-       #
-       # Lancement Container Supervision local
-       #
-       ContainerSUPERVServer().run()
-       #
-       # Attente de la disponibilité du Container Supervision local 
-        # dans le Naming Service
-       #
-       clt.waitNS("/Containers/" + theComputer + "/SuperVisionContainer")
-  #
-  # Activation du GUI de Session Server
-  #
-  #session.GetInterface()
-
-  end_time = os.times()
-  print
-  print "Start SALOME, elpased time : %5.1f seconds"% (end_time[4] - init_time[4])
-
-  return clt
-
-#
-# -----------------------------------------------------------------------------
-#
-
-if __name__ == "__main__":
-   clt=None
-   try:
-      clt = startSalome()
-   except:
-      print
-      print
-      print "--- erreur au lancement Salome ---"
-   
-   #print process_id
-   
-   
-   filedict='/tmp/'+os.getenv('USER')+'_SALOME_pidict'
-   #filedict='/tmp/'+os.getlogin()+'_SALOME_pidict'
-   
-   fpid=open(filedict, 'w')
-   pickle.dump(process_id,fpid)
-   fpid.close()
-   
-   print """
-
-Sauvegarde du dictionnaire des process dans , %s
-Pour tuer les process SALOME, executer : python killSalome.py depuis
-une console, ou bien killSalome() depuis le present interpreteur,
-s'il n'est pas fermé.
-
-runSalome, avec l'option --killall, commence par tuer les process restants 
-d'une execution précédente.
-
-Pour lancer uniquement le GUI, executer startGUI() depuis le present interpreteur,
-s'il n'est pas fermé.
-
-""" % filedict
-   
-   #
-   #  Impression arborescence Naming Service
-   #
-   
-   if clt != None:
-     print
-     print " --- registered objects tree in Naming Service ---"
-     clt.showNS()
-     session=clt.waitNS("/Kernel/Session")
-     catalog=clt.waitNS("/Kernel/ModulCatalog")
-     import socket
-     container =  clt.waitNS("/Containers/" + socket.gethostname().split('.')[0] + "/FactoryServerPy")
-   
-   if os.path.isfile("~/.salome/pystartup"):
-      f=open(os.path.expanduser("~/.salome/pystartup"),'w')
-      PYTHONSTARTUP=f.read()
-      f.close()
-   else:
-      PYTHONSTARTUP="""
-# Add auto-completion and a stored history file of commands to your Python
-# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
-# bound to the TAB key by default (you can change it - see readline docs).
-#
-# Store the history in ~/.salome/pyhistory, 
-#
-import atexit
-import os
-import readline
-import rlcompleter
-readline.parse_and_bind('tab: complete')
-
-historyPath = os.path.expanduser("~/.salome/pyhistory")
-
-def save_history(historyPath=historyPath):
-    import readline
-    readline.write_history_file(historyPath)
-
-if os.path.exists(historyPath):
-    readline.read_history_file(historyPath)
-
-atexit.register(save_history)
-del os, atexit, readline, rlcompleter, save_history, historyPath
-"""
-      f=open(os.path.expanduser("~/.salome/pystartup"),'w')
-      f.write(PYTHONSTARTUP)
-      f.close()
-
-   exec PYTHONSTARTUP in {}
-   
diff --git a/build_configure b/build_configure
deleted file mode 100755 (executable)
index 9a3b6c2..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# Tool for updating list of .in file for the SALOME project 
-# and regenerating configure script
-# Author : 
-# Modified by : Alexander BORODIN (OCN) - autotools usage
-# Date : 10/10/2002
-#
-ORIG_DIR=`pwd`
-CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"`
-
-########################################################################
-# Test if the KERNEL_ROOT_DIR is set correctly
-
-if test ! -d "${KERNEL_ROOT_DIR}"; then
-    echo "failed : KERNEL_ROOT_DIR variable is not correct !"
-    exit
-fi
-
-
-########################################################################
-# Test if the GUI_ROOT_DIR is set correctly
-
-if test ! -d "${GUI_ROOT_DIR}"; then
-    echo "failed : GUI_ROOT_DIR variable is not correct !"
-    exit
-fi
-
-
-########################################################################
-# Test if the MED_ROOT_DIR is set correctly
-
-if test ! -d "${MED_ROOT_DIR}"; then
-    echo "failed : MED_ROOT_DIR variable is not correct !"
-    exit
-fi
-
-
-########################################################################
-# Test if the SMESH_ROOT_DIR is set correctly
-
-if test ! -d "${SMESH_ROOT_DIR}"; then
-    echo "failed : SMESH_ROOT_DIR variable is not correct !"
-    exit
-fi
-
-########################################################################
-
-cd ${CONF_DIR}
-ABS_CONF_DIR=`pwd`
-
-
-# ____________________________________________________________________
-# aclocal creates the aclocal.m4 file from the standard macro and the
-# custom macro embedded in the directory adm_local/unix/config_files
-# and KERNEL config_files directory.
-# output:
-#   aclocal.m4
-#   autom4te.cache (directory)
-echo "====================================================== aclocal"
-
-aclocal -I adm_local/unix/config_files \
-        -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
-        -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \
-        -I ${MED_ROOT_DIR}/adm_local/unix/config_files \
-       -I ${SMESH_ROOT_DIR}/adm_local/unix/config_files || exit 1
-
-# ____________________________________________________________________
-# libtoolize creates some configuration files (ltmain.sh,
-# config.guess and config.sub). It only depends on the libtool
-# version. The files are created in the directory specified with the
-# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac).
-# output:
-#   adm_local/unix/config_files/config.guess
-#   adm_local/unix/config_files/config.sub
-#   adm_local/unix/config_files/ltmain.sh
-#echo "====================================================== libtoolize"
-
-libtoolize --force --copy --automake || exit 1
-
-# ____________________________________________________________________
-# autoconf creates the configure script from the file configure.ac (or
-# configure.in if configure.ac doesn't exist)
-# output:
-#   configure
-echo "====================================================== autoconf"
-
-autoconf
-
-# ____________________________________________________________________
-# automake creates some scripts used in building process
-# (install-sh, missing, ...). It only depends on the automake
-# version. The files are created in the directory specified with the
-# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac). This step also
-# creates the Makefile.in files from the Makefile.am files.
-# output:
-#   adm_local/unix/config_files/compile
-#   adm_local/unix/config_files/depcomp
-#   adm_local/unix/config_files/install-sh
-#   adm_local/unix/config_files/missing
-#   adm_local/unix/config_files/py-compile
-#   Makefile.in (from Makefile.am)
-echo "====================================================== automake"
-
-automake --copy --gnu --add-missing
diff --git a/clean_configure b/clean_configure
deleted file mode 100755 (executable)
index c7c8b7f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-rm -rf autom4te.cache aclocal.m4 configure make_config \$\(top_srcdir\)
-find . -name "*~" -print -exec rm {} \;
-find . -name "*.pyc" -print -exec rm {} \;
-#exit
-# ==================== ON SORT AVANT
-
-# Files created by libtoolize and automake
-( cd adm_local/unix/config_files && rm -f config.* depcomp install-sh l*.m4 ltmain.sh missing py-compile install-sh missing depcomp py-compile )
-find . -name Makefile.in | xargs rm -f
-rm -f COPYING INSTALL
diff --git a/configure.ac b/configure.ac
deleted file mode 100644 (file)
index 7094ead..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# Author : Marc Tajchman (CEA)
-# Date : 28/06/2001
-# Modified by : Patrick GOLDBRONN (CEA)
-# Modified by : Marc Tajchman (CEA)
-# Modified by : Alexander BORODIN (OCN) - autotools usage
-# Created from configure.in.base
-#
-AC_INIT([Salome2 Project HOMARD module], [6.5.0], [webmaster.salome@opencascade.com], [SalomeHOMARD])
-AC_CONFIG_AUX_DIR(adm_local/unix/config_files)
-AC_CANONICAL_HOST
-AC_CANONICAL_TARGET
-AM_INIT_AUTOMAKE([-Wno-portability])
-
-SHORT_VERSION=`echo $VERSION | awk -F. '{printf("%d.%d",$1,$2)}'`
-AC_SUBST(SHORT_VERSION)
-XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'`
-AC_SUBST(XVERSION)
-VERSION_DEV=1
-AC_SUBST(VERSION_DEV)
-
-# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.)
-MODULE_NAME=homard
-AC_SUBST(MODULE_NAME)
-
-echo
-echo ---------------------------------------------
-echo Initialize source and build root directories
-echo ---------------------------------------------
-echo
-
-dnl
-dnl Initialize source and build root directories
-dnl
-
-ROOT_BUILDDIR=`pwd`
-ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
-cd $ROOT_SRCDIR
-ROOT_SRCDIR=`pwd`
-cd $ROOT_BUILDDIR
-
-AC_SUBST(ROOT_SRCDIR)
-AC_SUBST(ROOT_BUILDDIR)
-
-echo
-echo Source root directory : $ROOT_SRCDIR
-echo Build  root directory : $ROOT_BUILDDIR
-echo
-echo
-
-if test -z "$AR"; then
-   AC_CHECK_PROGS(AR,ar xar,:,$PATH)
-fi
-AC_SUBST(AR)
-
-dnl Export the AR macro so that it will be placed in the libtool file
-dnl correctly.
-export AR
-
-echo
-echo ---------------------------------------------
-echo testing make
-echo ---------------------------------------------
-echo
-
-AC_PROG_MAKE_SET
-AC_PROG_INSTALL
-dnl
-dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques !
-
-echo
-echo ---------------------------------------------
-echo Coniguring production
-echo ---------------------------------------------
-echo
-AC_ENABLE_DEBUG(yes)
-AC_DISABLE_PRODUCTION
-
-echo ---------------------------------------------
-echo testing libtool
-echo ---------------------------------------------
-
-dnl first, we set static to no!
-dnl if we want it, use --enable-static
-AC_ENABLE_STATIC(no)
-
-AC_LIBTOOL_DLOPEN
-AC_PROG_LIBTOOL
-
-dnl Fix up the INSTALL macro if it s a relative path. We want the
-dnl full-path to the binary instead.
-case "$INSTALL" in
-   *install-sh*)
-      INSTALL='\${ROOT_BUILDDIR}'/adm_local/unix/config_files/install-sh
-      ;;
-esac
-
-echo
-echo ---------------------------------------------
-echo testing C/C++
-echo ---------------------------------------------
-echo
-
-cc_ok=no
-dnl inutil car libtool
-dnl AC_PROG_CC
-AC_PROG_CXX
-AC_CXX_WARNINGS
-AC_CXX_TEMPLATE_OPTIONS
-AC_DEPEND_FLAG
-# AC_CC_WARNINGS([ansi])
-cc_ok=yes
-
-echo
-echo ---------------------------------------------
-echo testing Fortran
-echo ---------------------------------------------
-echo
-
-fortran_ok=no
-AC_PROG_F77
-AC_F77_LIBRARY_LDFLAGS
-AC_PROG_FC
-AC_FC_LIBRARY_LDFLAGS
-if test "X$FC" != "X" ; then
-   fortran_ok=yes
-   F77=$FC
-fi
-
-dnl AM_CONDITIONAL( USE_GFORTRAN, [test "$F77" = "gfortran"])
-
-echo
-
-dnl Library libdl :
-AC_CHECK_LIB(dl,dlopen)
-
-dnl add library libm :
-AC_CHECK_LIB(m,ceil)
-
-dnl
-dnl Well we use sstream which is not in gcc pre-2.95.3
-dnl We must test if it exists. If not, add it in include !
-dnl
-
-AC_CXX_HAVE_SSTREAM
-
-echo
-echo ---------------------------------------------
-echo testing python
-echo ---------------------------------------------
-echo
-
-CHECK_PYTHON
-
-echo
-echo ---------------------------------------------
-echo testing swig
-echo ---------------------------------------------
-echo
-
-AM_PATH_PYTHON(2.3)
-CHECK_SWIG
-
-echo
-echo ---------------------------------------------
-echo testing threads
-echo ---------------------------------------------
-echo
-
-ENABLE_PTHREADS
-
-HOMARD_WITH_GUI=yes
-
-AM_CONDITIONAL(HOMARD_ENABLE_GUI, [test "${HOMARD_WITH_GUI}" = "yes"])
-
-if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then
-    echo
-    echo ---------------------------------------------
-    echo testing omniORB
-    echo ---------------------------------------------
-    echo
-
-    CHECK_OMNIORB
-
-    echo
-    echo ---------------------------------------------
-    echo default ORB : omniORB
-    echo ---------------------------------------------
-    echo
-
-    DEFAULT_ORB=omniORB
-
-    echo
-    echo ---------------------------------------------
-    echo testing Corba
-    echo ---------------------------------------------
-    echo
-
-    CHECK_CORBA
-
-    AC_SUBST_FILE(CORBA)
-    corba=make_$ORB
-    CORBA=adm_local/unix/$corba
-
-fi
-
-if test "${HOMARD_WITH_GUI}" = "yes"; then
-    echo
-    echo ---------------------------------------------
-    echo testing openGL
-    echo ---------------------------------------------
-    echo
-
-    CHECK_OPENGL
-
-    echo
-    echo ---------------------------------------------
-    echo testing QT
-    echo ---------------------------------------------
-    echo
-
-    CHECK_QT
-
-    echo
-    echo ---------------------------------------------
-    echo Testing GUI
-    echo ---------------------------------------------
-    echo
-
-    CHECK_SALOME_GUI
-
-    echo
-    echo ---------------------------------------------
-    echo Testing full GUI
-    echo ---------------------------------------------
-    echo
-
-    CHECK_CORBA_IN_GUI
-    if test "x${CORBA_IN_GUI}" != "xyes"; then
-      echo "failed : For configure HOMARD module necessary full GUI !"
-      exit
-    fi
-fi
-
-echo
-echo ---------------------------------------------
-echo testing HDF5
-echo ---------------------------------------------
-echo
-
-CHECK_HDF5
-
-echo
-echo ---------------------------------------------
-echo BOOST Library
-echo ---------------------------------------------
-echo
-
-CHECK_BOOST
-
-echo
-echo ---------------------------------------------
-echo Testing OpenCascade
-echo ---------------------------------------------
-echo
-
-CHECK_CAS
-
-
-echo
-echo ---------------------------------------------
-echo Testing Kernel
-echo ---------------------------------------------
-echo
-
-CHECK_KERNEL
-CHECK_MPI
-
-echo
-echo ---------------------------------------------
-echo Testing Med library
-echo ---------------------------------------------
-echo
-
-CHECK_MED3
-
-
-echo
-echo ---------------------------------------------
-echo Testing Med Module
-echo ---------------------------------------------
-echo
-
-CHECK_MED
-
-echo
-echo ---------------------------------------------
-echo Testing Smesh
-echo ---------------------------------------------
-echo
-
-CHECK_SMESH
-
-
-echo
-echo ---------------------------------------------
-echo Testing sphinx
-echo ---------------------------------------------
-echo
-
-CHECK_SPHINX
-
-
-echo
-echo ---------------------------------------------
-echo Summary
-echo ---------------------------------------------
-echo
-
-echo Configure
-if test "${HOMARD_WITH_GUI}" = "yes"; then
-variables="cc_ok fortran_ok boost_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok  hdf5_ok omniORB_ok Kernel_ok med3_ok SalomeGUI_ok Med_ok SMesh_ok  sphinx_ok"
-fi
-
-if test "${HOMARD_WITH_GUI}" = "no"; then
-variables="cc_ok fortran_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok hdf5_ok omniORB_ok  doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok SMesh_ok  sphinx_ok"
-fi
-
-for var in $variables
-do
-   printf "   %10s : " `echo \$var | sed -e "s,_ok,,"`
-   eval echo \$$var
-done
-
-echo
-echo "Default ORB   : $DEFAULT_ORB"
-echo
-
-dnl We don t need to say when we re entering directories if we re using
-dnl GNU make becuase make does it for us.
-if test "X$GMAKE" = "Xyes"; then
-   AC_SUBST(SETX) SETX=":"
-else
-   AC_SUBST(SETX) SETX="set -x"
-fi
-
-dnl AM_CONDITIONAL(GUI_ENABLE_CORBA, [test "$GUI_DISABLE_CORBA" = no])
-dnl AM_CONDITIONAL(ENABLE_PYCONSOLE, [test "$DISABLE_PYCONSOLE" = no])
-dnl AM_CONDITIONAL(ENABLE_GLVIEWER, [test "$DISABLE_GLVIEWER" = no])
-dnl AM_CONDITIONAL(ENABLE_PLOT2DVIEWER, [test "$DISABLE_PLOT2DVIEWER" = no])
-dnl AM_CONDITIONAL(ENABLE_SUPERVGRAPHVIEWER, [test "$DISABLE_SUPERVGRAPHVIEWER" = no])
-dnl AM_CONDITIONAL(ENABLE_OCCVIEWER, [test "$DISABLE_OCCVIEWER" = no])
-dnl AM_CONDITIONAL(ENABLE_VTKVIEWER, [test "$DISABLE_VTKVIEWER" = no])
-dnl AM_CONDITIONAL(ENABLE_SALOMEOBJECT, [test "$DISABLE_SALOMEOBJECT" = no])
-
-echo
-echo ---------------------------------------------
-echo generating Makefiles and configure files
-echo ---------------------------------------------
-echo
-
-#AC_OUTPUT_COMMANDS([ \
-#  chmod +x ./bin/*; \
-#  chmod +x ./bin/salome/*; \
-#])
-
-AC_HACK_LIBTOOL
-AC_CONFIG_COMMANDS([hack_libtool],[
-                    sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\
-                          $(pwd)/hack_libtool \1 \"\$[@]\" \n\
-                          }\n\
-                          CC=\"hack_libtool\"%g" libtool
-                    sed -i "s%\(\s*\)for searchdir in \$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path; do%\1searchdirs=\"\$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path\"\n\1for searchdir in \$searchdirs; do%g" libtool
-                    sed -i "s%\(\s*\)searchdirs=\"\$newlib_search_path \$lib_search_path \(.*\)\"%\1searchdirs=\"\$newlib_search_path \$lib_search_path\"\n\1sss_beg=\"\"\n\1sss_end=\"\2\"%g" libtool
-                    sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs; do\n\1  if ! test -d \$sss; then continue; fi\n\1  ssss=\$(cd \$sss; pwd)\n\1  if test \"\$ssss\" != \"\" \&\& test -d \$ssss; then\n\1    case \$ssss in\n\1      /usr/lib | /usr/lib64 ) ;;\n\1      * ) sss_beg=\"\$sss_beg \$ssss\" ;;\n\1    esac\n\1  fi\n\1done\n\1searchdirs=\"\$sss_beg \$sss_end\"\n\1\2%g" libtool
-                    ],[])
-
-# This list is initiated using autoscan and must be updated manually
-# when adding a new file <filename>.in to manage. When you execute
-# autoscan, the Makefile list is generated in the output file configure.scan.
-# This could be helpfull to update de configuration.
-AC_OUTPUT([ \
-       Makefile \
-       idl/Makefile \
-       adm_local/Makefile \
-       adm_local/unix/Makefile \
-       adm_local/unix/config_files/Makefile \
-       bin/Makefile \
-       bin/VERSION \
-       doc/Makefile \
-       doc/conf.py \
-        HOMARD_version.h \
-       src/Makefile \
-       src/HOMARD_I/Makefile \
-       src/HOMARD/Makefile \
-       src/HOMARDGUI/Makefile \
-       src/HOMARD_SWIG/Makefile \
-       resources/Makefile \
-       resources/HOMARDCatalog.xml \
-       resources/SalomeApp.xml \
-       tests/Makefile \
-])
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..1e0b85d
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+ADD_SUBDIRECTORY(en)
+ADD_SUBDIRECTORY(fr)
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644 (file)
index 9c9af87..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-#  File   : Makefile.in
-#  Author : Vasily Rusyaev (Open Cascade NN)
-#  Module : doc
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-if SPHINX_IS_OK
-
-homarddoc_DATA=html/index.html
-html/index.html:$(RSTFILES)
-       make htm
-
-endif
-
-homarddocdir=$(docdir)/gui/HOMARD
-
-SPHINXOPTS      =
-SOURCEDIR       = $(srcdir)
-SPHINXBUILD     = sphinx-build
-PAPEROPT_a4     = -D latex_paper_size=a4
-ALLSPHINXOPTS   = -d doctrees $(PAPEROPT_a4) $(SPHINXOPTS) $(SOURCEDIR)
-
-htm:
-       mkdir -p html doctrees
-       $(SPHINXBUILD) -c $(top_builddir)/doc -b html $(ALLSPHINXOPTS) html
-       @echo
-       @echo "Build finished. The HTML pages are in html."
-
-RSTFILES= \
-glossaire.rst \
-gui_create_boundary.rst \
-gui_create_case.rst \
-gui_create_hypothese.rst \
-gui_create_iteration.rst \
-gui_create_zone.rst \
-gui_homard.rst \
-gui_usage.rst \
-index.rst \
-intro.rst \
-tui_create_boundary.rst \
-tui_create_case.rst \
-tui_create_hypothese.rst \
-tui_create_iteration.rst \
-tui_create_zone.rst \
-tui_homard.rst \
-tui_usage.rst \
-tutorials.rst
-
-EXTRA_DIST+= $(RSTFILES) images files
-
-usr_docs: 
-       make install-data-local
-
-docs: usr_docs
-
-install-data-local:
-       $(INSTALL) -d $(DESTDIR)$(homarddocdir)
-       if test -d "html"; then b=; else b="$(srcdir)/"; fi; \
-       if test -d $$b"html"; then cp -rf $$b"html"/* $(DESTDIR)$(homarddocdir); fi;
-
-uninstall-local:
-       chmod -R +w $(DESTDIR)$(homarddocdir)
-       rm -rf $(DESTDIR)$(homarddocdir)/*
-
-clean-local:
-       -rm -rf doctrees
-       if test -d "html"; then rm -rf html ; fi
-
-dist-hook:
-       if test -d "html"; then b=; else b="$(srcdir)/"; fi; \
-       if test -d $$b"html"; then cp -rf $$b"html" $(distdir) ; fi
diff --git a/doc/conf.py.in b/doc/conf.py.in
deleted file mode 100644 (file)
index 4aa0a92..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-#
-# HOMARD documentation build configuration file, created by
-# sphinx-quickstart on Tue Jan  5 08:51:14 2010.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys, os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.append(os.path.abspath('.'))
-
-# -- General configuration -----------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',  'sphinx.ext.coverage',  'sphinx.ext.ifconfig']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-source_encoding = 'iso-8859-1'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'HOMARD'
-copyright = u'1996, 2011, 2012, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '@SHORT_VERSION@'
-# The full version, including alpha/beta/rc tags.
-release = '@VERSION@'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of documents that shouldn't be included in the build.
-#unused_docs = []
-
-# List of directories, relative to source directory, that shouldn't be searched
-# for source files.
-exclude_trees = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  Major themes that come with
-# Sphinx are currently 'default' and 'sphinxdoc'.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_use_modindex = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = ''
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'HOMARDdoc'
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('index', 'HOMARD.tex', u'HOMARD Documentation',
-   u'G. NICOLAS et T. FOUQUET', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_use_modindex = True
-
-
-# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/doc/en/CMakeLists.txt b/doc/en/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..3bf9147
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SALOME_CONFIGURE_FILE(conf.py.in conf.py)
+
+SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html ${CMAKE_CURRENT_SOURCE_DIR} html)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}")            
+
+ADD_CUSTOM_TARGET(html_docs_en COMMAND ${_cmd})
+
+INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target html_docs_en)")
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ DESTINATION ${SALOME_INSTALL_DOC}/gui/HOMARD/en)
+
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES html)
diff --git a/doc/en/conf.py.in b/doc/en/conf.py.in
new file mode 100644 (file)
index 0000000..e6d71de
--- /dev/null
@@ -0,0 +1,204 @@
+# -*- coding: utf-8 -*-
+#
+# HOMARD documentation build configuration file, created by
+# sphinx-quickstart on Tue Jan  5 08:51:14 2010.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',  'sphinx.ext.coverage',  'sphinx.ext.ifconfig']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'HOMARD'
+copyright = u'1996, 2011, 2017, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '@SALOMEHOMARD_VERSION@'
+# The full version, including alpha/beta/rc tags.
+release = '@SALOMEHOMARD_VERSION@'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'en'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['_build','ref','images','CVS','.svn']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = '@SPHINX_THEME@'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = None
+#html_logo = "../images/HOMARD.png"
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+html_favicon = None
+#html_favicon = "../images/homard_d.ico"
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_domain_indices = True
+
+# If false, no index is generated.
+html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+html_copy_source = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'HOMARDdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# Paper size option of the document class ('a4paper' or 'letterpaper'), default 'letterpaper'.
+paper_size = 'a4paper'
+
+# Point size option of the document class ('10pt', '11pt' or '12pt'), default '10pt'.
+pointsize = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'HOMARD.tex', u'HOMARD Documentation',
+   u'G. NICOLAS et T. FOUQUET', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+latex_logo = None
+#latex_logo = "../images/HOMARD.png"
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+latex_use_modindex = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/doc/en/demarrage_rapide.rst b/doc/en/demarrage_rapide.rst
new file mode 100644 (file)
index 0000000..3fed844
--- /dev/null
@@ -0,0 +1,79 @@
+.. _demarrage_rapide:
+
+Quick start
+###########
+.. index:: single: start
+.. index:: single: example
+
+The options to drive HOMARD in SALOME are described into :doc:`gui_usage`. Here are the basic instructions to discover how to use HOMARD from a very simple example.
+
+Let's imagine that a calculation of a thermal problem has been done with a given mesh. An output MED file was produced; it contains the mesh and the field of the temperatures over the nodes. We'd like to adapt the mesh to decrease the variation of the temperature from one node to another below a threshold.
+
+First, the module HOMARD is launched, by the creation of a new study; the same method as for the other modules of SALOME.
+
+.. image:: images/homard_1.png
+   :align: center
+
+Once the activation of the module HOMARD is done, a case is created with the choice "*New case*" into the menu.
+
+.. image:: images/homard_2.png
+   :align: center
+
+This window appears:
+
+.. image:: images/intro_31.png
+   :align: center
+
+Two answers must be given: the directory that will contain the files produced by the further adaptations and the MED file from the initial calculation. In this case, the default options are left unchanged: conformity of the mesh and no curved boundaries. Validate by "Apply and close".
+
+.. image:: images/intro_32.png
+   :align: center
+
+The object browser is enriched with this case. Unfold the case until the mesh of this iteration #0 can be seen. This iteration #0 is selected and a new iteration is required by "*New iteration*" into the menu or with the mouse.
+
+.. image:: images/intro_331.png
+   :align: center
+
+This window appears:
+
+.. image:: images/intro_33.png
+   :align: center
+
+The file that contains the field of temperature from the computation is selected. It is the same as the one given for the creation of the case.
+
+.. image:: images/intro_34.png
+   :align: center
+
+Click "New" into the 'hypothesis' part. This window appears:
+
+.. image:: images/intro_35.png
+   :align: center
+
+The default options are modified to respect our choice for the driving of the adaptation. Selecting the jump between elements and selecting an absolute threshold of 4.0 will produce the splitting of every single edge of an element where the variation of the temperature is higher than 4.0 between the two vertices of the edge.
+
+.. image:: images/intro_36.png
+   :align: center
+
+The creation of the hypothesis is validated by "Apply and close"; the creation of the new iteration is validated too. The object browser is enriched by the description of this hypothesis and this iteration. The iteration can be seen with a specific icon "waiting".
+
+The adaptation is launched by the selection of the iteration. "*Compute*" is choosen either in the menu, or with the mouse. The MED file of the new mesh, ``maill.01.med``, and some files for information are included into the object browser. Note that the MED file of the new mesh is located into the directory of the case.
+
+.. image:: images/intro_37.png
+   :align: center
+
+Now, this new mesh can be used for a second thermal calculation, with the same conditions as for the first one. Once this second calcultion is done, the adaptive process can go on. First, go back into the module HOMARD of SALOME. The last iteration "*Iter_1*" is selected and a new iteration is asked for. This window appears:
+
+.. image:: images/intro_38.png
+   :align: center
+
+The adaption goes on with the same criteria; the hypothesis "*Hypo_1*" is kept. The only operation is to give the name of the MED file from the last computation for the new field of temperature.
+
+.. image:: images/intro_39.png
+   :align: center
+
+As before, the iteration is computed and the results are found into the directory of the case, including the mesh ``maill.02.med``.
+
+.. image:: ../images/intro_40.png
+   :align: center
+
+A new calculation can be launched over this new mesh. The alternation computation/adaptation is done until the final result.
diff --git a/doc/en/divers.rst b/doc/en/divers.rst
new file mode 100644 (file)
index 0000000..020e06a
--- /dev/null
@@ -0,0 +1,84 @@
+.. _divers:
+
+Miscellaneous
+#############
+
+References
+**********
+.. index:: single: reference
+
+For a reference to HOMARD, use:
+
+G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, "*Finite Elements in Analysis and Design*", Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+`Available here <http://dx.doi.org/10.1016/j.finel.2012.11.008>`_
+
+Other references are available on the site for `HOMARD <http://www.code-aster.org/outils/homard/en/divers.html>`_
+
+Evolutions of the module
+************************
+.. index:: single: evolution
+
+Here are the main evolutions de HOMARD from the first release in SALOME 6.5.
+
+SALOME RELEASE 6.6:
+    - Interface with med 3.0.6
+    - Default values for the time steps
+    - New element types: TRIA7 and QUAD9
+    - Optional output into the MED file of the level of refinement of every element
+
+SALOME RELEASE 7.1:
+    - Correction of a bug in the filtering of the refinement by groups
+    - Driving of the adaptation by a threshold that is based upon the mean and the standard deviation (see :ref:`tui_create_hypothese`)
+    - TUI: the last time step for the driving instant can be selected by SetTimeStepRankLast (see :ref:`tui_create_iteration`)
+    - The destruction of the objects is available (GUI and TUI)
+    - The TUI functions are modified: they act onto the objects and no more by the names:
+      ``homard.AssociateIterHypo(iter_name,hypo_name)`` becomes ``iter.AssociateHypo(hypo_name)``, ``homard.AssociateHypoZone(hypo_name,zone_name,type_use)`` becomes ``hypo.AddZone(zone_name,type_use)``, ``homard.CreateIteration(iter_name,iter_parent_name)`` becomes ``case.NextIteration(iter_name)`` ou ``iter.NextIteration(iter_name)``
+    - Addition of a function:
+      ``cas.LastIteration()`` : returns the last iteration of the case (see :ref:`tui_create_iteration`)
+    - Mesh analysis (see :ref:`gui_mesh_info`)
+
+SALOME RELEASE 7.2:
+    - A cone can be used as a support for a 2D boundary (see :ref:`tui_create_boundary`)
+    - The result can be published or not published in SMESH (see :ref:`tui_create_iteration`)
+      ``iter.Compute(option)`` becomes ``iter.Compute(option1, option2)``
+    - A serie of iterations that is stored in a directory can be followed (see :ref:`gui_create_case`)
+
+SALOME RELEASE 7.3:
+    - English documentation
+    - Options to track the computation (see :ref:`tui_create_iteration`): ``iter.SetInfoCompute(MessInfo)``
+    - Automatic creation of YACS schema:
+      ``case.WriteYACSSchema(ScriptFile, DirName, MeshFile)``: writes a schema YACS relative to the case (see :ref:`tui_create_case`)
+    - The initial mesh is not published in SMESH.
+    - The refinement of 2D meshes with quadrangles is improved to take into account 'staircases'.
+    - The fields overs elements can be interpolated with two ways: intensive or extensive.
+    - The time steps for the interpolation of the files can be choosen:
+      ``SetFieldInterpTimeStep(FieldInterp, TimeStep)``: defines the time step for the interpolation of the field (see :ref:`tui_create_iteration`)
+      ``SetFieldInterpTimeStepRank(FieldInterp, TimeStep, Rank)``: defines the time step and the rank for the interpolation of the field (see :ref:`tui_create_iteration`)
+    - If error occurs into the python instructions, the program stops.
+
+SALOME RELEASE 7.4 :
+    - Scroll bar for the large windows.
+    - The meshes are published only if requested.
+    - The torus is a new possibility for the analytical boundary.
+    - The function ``SetAdapRefinUnRef(TypeAdap, TypeRaff, TypeDera)`` is suppressed. For an adaptation by a field or by zones, the mode refinement/unrefinement is automatically set from the other parameters of the hypothesis. For a uniform refinement, the function ``SetUnifRefinUnRef(TypeRaffDera)`` is now used (see :ref:`tui_create_hypothese`).
+    - If an error occurs, the name of the message file is displayed.
+    - Release 11.1 for the HOMARD binary. The conformal refinement of the meshes with hexaedra is improved: less meshes are produced.
+
+SALOME RELEASE 7.5 :
+    - Additional extra output: diameters and qualities; the function ``SetExtraOutput(option)`` is now used (see :ref:`tui_create_hypothese`).
+    - Release 11.2 for the HOMARD binary ; improvement for the 1D curve boundaries.
+
+SALOME RELEASE 7.6 :
+    - Interpolation of all the fields into the input file.
+
+SALOME RELEASE 8.1 :
+    - Interface with med 3.2.0
+    - New options within the choice conformal/non-conformal.
+    - Less meshes are involved in the case of a non conformal refinement of a mesh made of hexahedra.
+    - Correction of an error when refinement and unrefinement are coupled for a mesh made of hexahedra.
+
+SALOME RELEASE 8.3 :
+    - Interface with med 3.2.1
+    - Output of the list of the meshes that are connected with a non conformal link.
+
diff --git a/doc/en/glossaire.rst b/doc/en/glossaire.rst
new file mode 100644 (file)
index 0000000..4587aaf
--- /dev/null
@@ -0,0 +1,37 @@
+.. _glossaire:
+
+Glossary
+########
+
+.. glossary::
+   :sorted:
+
+   refinement
+      The refinement is an operation that consists in splitting the selected elements.
+
+   level
+      The level of an element corresponds to the number of splitting that were done to obtain it. The levem of the elements in the initial mesh is 0.
+
+   unrefinement
+      The unrefinement is an operation that consists in removing the selected elements. In fact, the objective is to cancel a previous splitting: a 'higher' level than the initial mesh cannot be obtained.
+
+   zone
+      A zone is a region that may govern the adaptation: every element with at least 2 nodes inside the zone is split or removed, depending on the choice.
+
+   case
+      A case is defined with an initial mesh and a list of adaptations.
+
+   error indicator
+      The error indicator is a field that is expressed over the elements. It represents an estimation of the error between the real solution and the computed solution.
+
+   iteration
+      An iteration is the process that transform a mesh to another one into a case. An iteration implies refinement and/or unrefinement, following the associated hypothesis.
+
+   hypothesis
+      An hypothesis describes the conditions that governs the modification from a mesh to another one: refinement and/or unrefinement, etc. An hypothesis is referenced by 1 or more iterations.
+
+   field
+      A field is expressed over a mesh, onto node or element, with 1 or more components.
+
+   MED
+      It is the excange format for the meshes and the fields in SALOME.
diff --git a/doc/en/gui_create_boundary.rst b/doc/en/gui_create_boundary.rst
new file mode 100644 (file)
index 0000000..f650666
--- /dev/null
@@ -0,0 +1,142 @@
+.. _gui_create_boundary:
+
+The boundary
+############
+.. index:: single: boundary
+.. index:: single: frontière
+
+The object boundary contains all the geometrical definitions allowing to describe a curved boundary to be followed.
+
+There are two modes of description of a boundary:
+
+  - Discrete: this mode is used to describe a curve 1D
+  - Analytics: this mode is used to describe a surface
+
+
+Discrete boundary
+*****************
+
+The follow-up of a discrete boundary will be made by selecting a boundary chosen in the list of the existing discrete boundaries.
+
+In the starting up, the list is empty. It is necessary to create a first discrete boundary by activation of the button "*New*" :
+
+.. image:: images/create_boundary_di_1.png
+   :align: center
+
+The window invites in the choice of a file of mesh. This mesh is the one of all the lines constituting the boundary. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary.
+
+.. image:: images/create_boundary_di_2.png
+   :align: center
+
+.. note::
+  The file has to contain only a single mesh.
+
+If discrete boundaries were already defined for another case, we can select one of them. We can also create a new discrete boundary by activation of the button "*New*", as explained previously.
+
+.. image:: images/create_boundary_di_3.png
+   :align: center
+
+
+
+Analytical boundary
+*******************
+In the starting up, SALOME shows a table with one only one column. This column contains the list of all the groups of the initial mesh defining the case.
+
+.. image:: images/create_boundary_an_1.png
+   :align: center
+
+It is necessary to create a first analytical boundary by activation of the button "*New*". We shall have the choice between cylinder, sphere, cone or torus. When the boundary will be validated, its name will appear in header of the second column.
+
+.. image:: images/create_boundary_an_2.png
+   :align: center
+
+It is now necessary to establish the link enter the mesh defining the case and this boundary described analytically. It is made by checking the groups of the faces which have to be on the boundary.
+
+.. image:: images/create_boundary_an_3.png
+   :align: center
+
+This operation is repeated as often as we wish to place faces of meshs on a curved surface:
+
+.. image:: images/create_boundary_an_4.png
+   :align: center
+
+.. note::
+
+  A group can be checked very well never: it means that the elements which it defines belong to none of the described boundaries.
+
+  A group can be checked only once. Indeed, surface elements cannot belong to more than one surface.
+
+  Several groups can be checked for the same boundary. It occurs if the initial mesh of the zone was subdivided into several groups: all the surface elements belong to this surface but were distributed in several groups.
+
+  Conversely, a boundary can be very well retained by no group. It occurs if it was defined for a previous case and if it is groundless for the case in the course of definition.
+
+
+There are four types of analytical boundary:
+
+  - Cylindre
+  - Sphere
+  - Cone, described by an axis and an angle or by two radius
+  - Torus
+
+.. note::
+  The numerical values proposed by default take into account the geometry of the mesh.
+
+
+Cylindre
+========
+.. index:: single: cylindre
+
+The cylinder is defined by a point of the axis, its axis and its radius. The axis is defined by a vector. The standard of this vector is not inevitably equal to 1; also, its orientation has no importance. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary.
+
+.. image:: images/create_boundary_an_cy.png
+   :align: center
+
+Sphere
+======
+.. index:: single: sphere
+
+The sphere is defined by its center and its radius. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary.
+
+.. image:: images/create_boundary_an_sp.png
+   :align: center
+
+Cone
+====
+.. index:: single: cone
+
+A cone is defined by two different manners: the center, the axis and the angle of opening in degree or by two points centered on the axis and the associated radius. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary.
+
+Creation by an origin, an axis and an angle of opening:
+
+.. image:: images/create_boundary_an_co_1.png
+   :align: center
+
+Creation by two points centered on the axis and the associated radius:
+
+.. image:: images/create_boundary_an_co_2.png
+   :align: center
+
+.. index:: single: object browser
+
+Torus
+=====
+.. index:: single: torus
+
+The torus is defined by its centre, its axis, the revolution radius and the primary radius. The axis is defined by a vector. The standard of this vector is not inevitably equal to 1; also, its orientation has no importance. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary.
+
+.. image:: images/create_boundary_an_to.png
+   :align: center
+
+Object browser
+**************
+At the end of this creation of boundaries, the object browser was enriched. We find all the boundaries created, identified there by their name, with the possibility of editing them.
+
+.. image:: images/create_boundary_1.png
+   :align: center
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_boundary`
+
+
+
diff --git a/doc/en/gui_create_case.rst b/doc/en/gui_create_case.rst
new file mode 100644 (file)
index 0000000..43c6fa3
--- /dev/null
@@ -0,0 +1,186 @@
+.. _gui_create_case:
+
+The creation of a case
+######################
+.. index:: single: case
+
+The definition of a case is done with the following data:
+
+  - A name
+  - A directory
+  - The file of the initial mesh
+  - The type of conformity for the serie of adaptations
+  - Some curved boundaries
+
+.. image:: images/intro_32.png
+   :align: center
+
+
+Name of the case
+****************
+A name is automatically suggested for the case: Case_1, Case_2, etc. This name can be modified. It must be a new name.
+
+The directory
+*************
+The directory will countain all the files producted by the successive adaptations. By default, nothing is suggested. The choice is made either by giving a name into the text zone or by a selection through the search window. In this directory, the MED files for the adapted mesh will be stored, with name ``maill.xx.med``, where ``xx`` is a rank number automatically created. These files can be seen into the object browser.
+
+.. image:: images/create_case_2.png
+   :align: center
+
+.. index:: single: mesh;initial
+.. index:: single: MED
+
+The initial mesh
+****************
+The initial mesh must be stored into a MED file. Usually, it is produced by the software that solves the physical problem. But it also can be created by the module SMESH and exported with the MED format. The name of the file is choosen either by giving a name into the text zone or by a selection through the search window.
+
+
+.. image:: images/create_case_3.png
+   :align: center
+
+.. note::
+  Only one mesh into the file.
+
+.. warning::
+  The initial mesh must not be itself the product of an adaptation by HOMARD. If it is, the coherence between the different levels of refinement will be lost.
+
+
+.. index:: single: conformity
+
+Type of conformity
+******************
+The future iterations for this case must respect the the same behaviour regarding the type of conformity.
+
+The default option, 'conformal', implies that the meshes produced by HOMARD will be conformal, as expected in the finite element method. This is a classical choice for most of the simulation software with the finite element method.
+
+The treatment of non conformal meshes is possible.
+
+.. image:: images/create_case_4.png
+   :align: center
+
+Some extra options can be given by the advanced options.
+
+.. index:: single: boundary
+
+The boundaries
+**************
+If the limit of the domain is curved, HOMARD can put the new nodes onto these curved limits to avoid some artificial singularities. This technique is effective for external limits as well for internal limits.
+
+Two situations:
+
+* 1D curve: this curve may be defined into a plane, for example for a 2D calculation. It can also be defined into the 3D space, for example to describe the intersection of two surfaces. Such a line is defined with a discrete desription.
+* a surface: such a surface is defined with an analytical description.
+
+Check the button:
+
+.. image:: images/create_case_5.png
+   :align: center
+
+The definition of the boundaries is described in :doc:`gui_create_boundary`.
+
+.. index:: single: pyramid
+
+Advanced options
+****************
+Default: no advanced option. Nevertheless, some advanced options can be defined :
+
+The pyramids
+============
+
+The first option is about the pyramids.
+
+.. image:: images/create_case_7.png
+   :align: center
+
+HOMARD is able to work with 2D or 3D meshes as well, including the following elements:
+   - nodal element
+   - segment
+   - triangle
+   - quadrangle
+   - tetrahedron
+   - hexahedron
+   - prism
+
+If pyramids are present into the initial mesh, HOMARD stops with an error. However, if no refinement will be in contact with any edge of those pyramids, the "Authorized pyramids" whould be checked. The adaptation will go on and the pyramids will be back as they are into the initial mesh.
+Nevertheless, if the computation is available with non conformal meshes, 3 possibilities are available:
+
+Which conformity?
+=================
+
+With a conformal refinement, the choice is given between the standard conformal refinement, default option, and a refinement into boxes, e.g. without any staircases.
+
+.. image:: images/create_case_8.png
+   :align: center
+
+Which non conformity?
+=====================
+
+With a non conformal refinement, 4 choices are available:
+
+* standard non conformal refinement, default option
+* refinement into boxes, e.g. without any staircases
+* 1 node per edge: every single edge of an element ban be split once while its neighbour is not.
+* free: no limit for the number of hanging node.
+
+.. image:: images/create_case_9.png
+   :align: center
+
+The external format
+===================
+.. index:: single: MED
+.. index:: single: Saturne
+
+By default, the external format is MED. When coupled with Saturne 2D, it is necessary to precise it to correctly deal with the pseudo 2D situation.
+
+.. image:: ../images/create_case_1.png
+   :align: center
+
+The pursuit of a case
+*********************
+.. index:: single: pursuit
+.. index:: single: YACS
+
+The pursuit of a case is interesting in the following situation. A list of adaptations was done for a case and, at the end, SALOME is closed. The directories for these iterations are kept. Then, the user wants to go on these iterations from the final point of the previous list. This function is useful with a schema YACS if a long list of adaptations is cut into small parts.
+
+The compulsatory condition to pursue an iteration is to keep two files into the same directory:
+   - the configuration file that was a data for the binary module of HOMARD; this file looks like ``HOMARD.Configuration.(n).vers.(n+1)``
+   - the MED file that saves the history of th eprevious adaptations; this file looks like ``maill.(n).hom.med``
+
+Either an iteration known by its directory or an iteration identified into the directory of a case can be selected.
+
+To pursuit of an iteration known by its directory, the definition of the case is made by the following data:
+
+  - A name
+  - A directory
+  - The directory of the data base
+
+.. image:: images/pursue_case_1.png
+   :align: center
+
+The pursuit of an iteration into a previous case can be operated; the default starting iteration is the last iteration of the case.
+
+.. image:: images/pursue_case_2.png
+   :align: center
+
+If the starting iteration is not the last one, its number must be given:
+
+.. image:: images/pursue_case_3.png
+   :align: center
+
+.. note::
+  The governing parameters of the created case are the same as the ones of the strating iteration: same mode for the conformity, for instance.
+
+
+Object browser
+**************
+At the end of the creation, the case is included into the object browser. The initial iteration, known by the name of the associated mesh, is shown.
+
+.. image:: images/create_case_6.png
+   :align: center
+
+
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_case`
+
diff --git a/doc/en/gui_create_hypothese.rst b/doc/en/gui_create_hypothese.rst
new file mode 100644 (file)
index 0000000..32560ea
--- /dev/null
@@ -0,0 +1,142 @@
+.. _gui_create_hypothese:
+
+The hypothesis
+##############
+.. index:: single: hypothesis
+
+The hypothesis contains all parameters of driving of a mesh adaptation. This operation allows to realize the iteration to which it is attached.
+
+There are three classes of hypotheses:
+
+  - Uniform over the whole mesh,
+  - According to a field,
+  - According to geometrical zone.
+
+.. image:: images/create_hypothese_1.png
+   :align: center
+
+
+Name of the hypothesis
+**********************
+A name of the hypothesis is automatically proposed: Hypo_1, Hypo_2, etc. This name can be modified. It must not have been used for a previous hypothesis.
+
+Uniform adaptation
+******************
+By default we propose a uniform refinement. When the starting point is a mesh which was already refined, the option of unrefinement will eliminate the produced elements.
+
+Adaptation by a field
+*********************
+
+.. note::
+  To be able to adapt the mesh according to a field it is beforehand necessary to have indicated the file med containing the field. It is made in the window of construction of the iteration (see :doc:`gui_create_iteration`). The name of the file which was selected is shown without possible modification here:
+
+.. image:: images/create_hypothese_ch_1.png
+   :align: center
+
+The deliberate field is to be chosen in the list of fields contained in the file.
+Once this field was chosen, the list of its components is displayed. It is enough to indicate the wished component(s).
+
+If we choose a single component, by default, it is the absolute value which will be used, but it is possible to use the relative value. In the case of several components, by default HOMARD will use the L2 norm (Euclidian). We can however choose the infinite norm (the max of the absolute values of the components).
+
+We can choose not to use directly the field, but its variation from an element to its neighbors. For that purpose, we shall check the button "*Jump between elements*".
+
+.. image:: images/create_hypothese_ch_2.png
+   :align: center
+
+The refinement is made according to a threshold which defines a high criterion of refinement. All the elements for which the indicator is upper to this criterion will be refined.
+For the choice of the criterion, four variants are possible:
+
+  - According to a percentage of elements to be refined, real number included between 0 and 100; HOMARD will refine x% of the elements which have the biggest value of the field.
+  - According to a relative value of the field, the number included between 0 and 100; HOMARD will refine the elements where the field is upper in x% of the interval [mini, maxi].
+  - Beyond an absolute value; all the elements with a value of field superior to this value will be refined.
+  - Beyond an absolute value that is equal to the average of the mean of the field increased of n times its standard deviation; all the elements with a value of field superior to this value will be refined.
+
+The same convention applies to the unrefinement, the by replacing upper by lower. We can inactivate one of the functions (refinement or unrefinement) by checking the button ad_hoc.
+
+.. image:: images/create_hypothese_ch_3.png
+   :align: center
+
+
+Adaptation by a zone
+********************
+.. index:: single: zone
+
+In the starting up, it is necessary to create a first zone by activation of the button "*New*" (see :doc:`gui_create_zone`) :
+
+.. image:: images/create_hypothese_zo_1.png
+   :align: center
+
+When zones were already created, the list appears in the window, what allows to select the deliberate zones. We then have to specify if a zone is used to refine all the elements a edge of which is contained in the zone, or if the zone is used for unrefine the internal elements in the zone. If no choice is made, the zone is ignored in this hypothesis.
+
+.. image:: images/create_hypothese_zo_2.png
+   :align: center
+
+
+Filtering by the groups
+***********************
+.. index:: single: group
+
+We can restrict the application of the hypothesis of adaptation to groups. So elements not belonging to these groups will not be modified, except by later contamination of the refinement to assure the conformity of the final mesh.
+We check the associated button:
+
+.. image:: images/create_hypothese_gr_1.png
+   :align: center
+
+The list of the present groups of elements in the mesh is shown. It is enough to check those wanted to restrict the hypothesis of adaptation.
+
+.. image:: images/create_hypothese_gr_2.png
+   :align: center
+
+
+Interpolation of fields
+***********************
+.. index:: single: interpolation
+
+.. note::
+  To be able to interpolate a field from the former towards the new mesh, it is beforehand necessary to have indicated the file med containing the field. It is made in the window of construction of the iteration (see :doc:`gui_create_iteration`).
+
+By default, no field is interpolated. On the contrary, we can ask for the interpolation of all the present fields in the supplied file:
+
+.. image:: images/create_hypothese_ch_4.png
+   :align: center
+
+If we want to choose fields to be interpolated, it is necessary to check them in the list of all the present fields in the supplied file:
+
+.. image:: images/create_hypothese_ch_5.png
+   :align: center
+
+
+Advanced options
+****************
+If the compartment "*Advanced Options*" is not checked, no additional constraint is defined.
+If the compartment is checked, we shall define the advanced options.
+
+A first series of options concern the maximal sharpness of mesh which we do not want to exceed. Two directives are possible, separately or together. We can impose a size of minimal element: a element the diameter of which is lower than this limit will not be any more split. By default, we propose a minimal 0 diameter, what means imposing nothing. We can impose a level of maximal refinement. By default, the maximum is 99, what amounts generally to impose nothing.
+
+The second series of options has interest only in case the adaptation is driven by a field and in case this field is not defined everywhere in the mesh. It arrives for example when we build a field based on a distance in a plan while the domain is 3D: the field will not be defined on nodes outside the plan. For such fields, this option allows to specify the behavior which we wish in the regions where the field is not defined. By default, there is nothing: elements are kept as they are. We can choose two other variants: to refine all the elements will a priori be cut, or to unrefine all the elements will be candidate in the unrefinement.
+
+The last choice concerns an additional output of the adaptation. By default, nothing is checked and no field is produced. If at least one compartment is checked, the output file MED will contain some extra fields.
+
+- Level of refinement of every element. The convention is the one of HOMARD: an element of the initial mesh is of level 0, an element produced by the refinement of an initial element carries the level 1, etc. The elements of transition which are produced between two different levels, n and n+1, are affected by the half-level n+0,5.
+- Quality of the elements.
+- Diameters of the elements.
+- Parents of the elements.
+- Neighbourhood of the cells that are glued in a non-conformal mesh.
+
+.. image:: images/create_hypothese_av_1.png
+   :align: center
+
+Object browser
+**************
+.. index:: single: object browser
+
+The object browser contains the created hypotheses and the iterations which use them. The description of the zones which are possibly attached to them is present.
+
+.. image:: images/create_hypothese_2.png
+   :align: center
+
+
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_hypothese`
diff --git a/doc/en/gui_create_iteration.rst b/doc/en/gui_create_iteration.rst
new file mode 100644 (file)
index 0000000..3dc0708
--- /dev/null
@@ -0,0 +1,81 @@
+.. _gui_create_iteration:
+
+The iteration
+#############
+.. index:: single: iteration
+
+The definition of an iteration is done by the following information:
+
+  - The previous iteration
+  - The name of the resulting mesh
+  - The used hypothesis
+  - Possibly, the file of the field of error indicators
+
+.. image:: images/create_iteration_1.png
+   :align: center
+
+Name of the iteration
+*********************
+A name of iteration is proposed automatically: Iter_1, Iter_2, etc This name can be modified. It must not have been used for a preceding iteration.
+
+The preceding iteration
+***********************
+The preceding iteration is selected in the object browser. The name of the corresponding mesh will be posted.
+
+.. index:: single: mesh;result
+
+The name of the resulting mesh
+******************************
+The current iteration will produce a mesh. This mesh will be known under a name. This name is provided by typing it in the zone of text. By default, one proposes a name identical to that of the preceding iteration.
+
+.. index:: single: field
+.. index:: single: MED
+
+The field
+*********
+To create or use an hypothesis of adaptation based on a field expressed on the mesh, one must provide the file where the field is. It is also the case if one wants to interpolate fields from mesh #N to the mesh #(N+1). This file is with format MED. Classically, it will have been produced by the computation software with which one works. The name of the file can be provided, either by typing the name in the zone of text, or by activating the function of research.
+
+.. image:: images/create_iteration_2.png
+   :align: center
+
+If steps of time were defined, a simple solution consists in treating the fields with the last step of time recorded in the file. If one wants to define another step of time, one notches the button "*Given time step*". The values of 'time' and 'Sequence number' are those corresponding to convention MED (time step/rank). These values depend on the logic which was retained by the software which wrote the file. Often these two values are identical but it happens that one disjoins the time steps and the intervals of saving.
+
+.. image:: images/create_iteration_3.png
+   :align: center
+
+.. index:: single: hypothesis
+
+The hypothesis
+**************
+The iteration in progress will control the adaptation by HOMARD according to a scenario defined on an hypothesis. This one is selected in the list of the existing hypotheses.
+
+With starting, it is necessary to create a first hypothesis by activation of the button "*New*" (see: :doc:`gui_create_hypothese`) :
+
+.. image:: images/create_iteration_4.png
+   :align: center
+
+Then, if an hypothesis previously defined is appropriate, it is enough to select it in the proposed list. If not, it is necessary to create a new hypothesis by activation of the button "*New*", then to select it in the proposed list:
+
+.. image:: images/create_iteration_5.png
+   :align: center
+
+.. note::
+  If one considers an adaptation according to the values of a field on the mesh, it is necessary to have given information about this field before creating a new hypothesis.
+
+.. index:: single: object browser
+
+Object browser
+**************
+At the conclusion of this creation of iteration, the object browser was enriched. One finds there the initial iteration, identified by the name of the mesh which was read in the provided file, the current iteration, identified by its name. One finds also the hypothesis which is attached to him. The icon compared to the iteration makes it possible to differentiate the iterations calculated or not.
+
+.. image:: images/create_iteration_6.png
+   :align: center
+
+When several iterations are connected, their hypothesis is visible in the object browser. One will notice in the figure hereafter that two iterations can share the same hypothesis.
+
+.. image:: images/create_iteration_7.png
+   :align: center
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_iteration`
diff --git a/doc/en/gui_create_yacs.rst b/doc/en/gui_create_yacs.rst
new file mode 100644 (file)
index 0000000..0a846c5
--- /dev/null
@@ -0,0 +1,137 @@
+.. _gui_create_yacs:
+
+The schema YACS
+###############
+.. index:: single: YACS
+.. index:: single: case
+
+The object YACS contains every definition that allows the creation of a schema. This schema will drive the alternation of the computation of a physical modelization over a mesh and the adaptation of the mesh for the computation. This alternation is driven by some criteria for the convergence.
+
+.. note::
+  To read an exhaustive description of any part of the schema, see :doc:`yacs`
+
+Procedure
+*********
+The automatic creation of the schema is going to be made in three phases.
+
+- At first, it is necessary to have done a calculation on the very first mesh. This calculation will have produced the results in a MED file.
+- Then, a case is created in the module HOMARD, as described in :doc:`gui_create_case`. In this case, we create the following iteration of the mesh by defining a hypothesis of adaptation ; see :doc:`gui_create_iteration`.
+- Last, from this case, a schema will be created, based on the hypothesis for the adaptation.
+
+
+.. image:: images/create_yacs_01.png
+   :align: center
+   :alt: yacs - creation
+   :width: 516
+   :height: 295
+
+Name of the schema
+******************
+A name of schema is automatically proposed: YACS_1, YACS_2, etc. This name can be modified. He must not have been already used for another schema.
+
+The script
+**********
+
+The file containing the script which allows to launch the calculation connected to the physical modelling is supplied here. It is a script python who has to respect the following rules:
+
+- the name of the class which manages the calculation is ``Script``
+- to launch the calculation is made by the method``Compute()``
+- the result of the calculation is under the shape of three variables: the code of error, a message, a dictionary python.
+
+If they are necessary for the creation of the class, we can supply arguments under the shape:
+
+- ``--rep_calc=rep_calc``, where ``rep_calc`` is the directory for the computation
+- ``--num=num``, where ``num`` eis the number of calculation : 0 for the very first calculation, then 1, 2 etc.
+- ``--mesh_file=meshfile``, where ``meshfile`` is the file that contains the mesh for the computation
+- ``-v``, for the messages
+
+In return:
+
+- ``error`` : the error code, integer: 0 if it was correct, non 0 if not
+- ``message`` : a possible message of information about the calculation
+- ``dico_resu`` : a dictionary python that contains at less the two following keys: ``FileName`` is the key for the name of the MED file which contains the results of the calculation, ``V_TEST`` is the key for the real value to be tested.
+
+
+Example for the script:
+::
+
+    argu = ["--rep_calc=" + rep_calc)]
+    argu.append("--num=%d" % numCalc)
+    argu.append("--mesh_file="  + MeshFile)
+    Script_A = Script(argu)
+    error, message, dico_resu = Script_A.compute ()
+
+The directory
+*************
+The directory will countain all the files producted by the computations. By default, nothing is suggested. The choice is made either by giving a name into the text zone or by a selection through the search window.
+
+The initial mesh
+****************
+The initial mesh must be stored into a MED file. It is the very first mesh that is used to solve the physical problem. The name of the file is choosen either by giving a name into the text zone or by a selection through the search window.
+
+The type of the schema
+**********************
+Two types of schemas are proposed: constant or variable.
+
+The default choice, 'constant', alternate a computation that is always the same and a mesh adaptation: from a computation to another one, the only part that is changed is the mesh. All the rest is identical. For example, in case the calculation would model a transient phenomenon, it is always the completeness of the transient phenomenon that is taken into account.
+
+The option 'variable' is inactive today.
+
+Saving the schema
+*****************
+By default, the schema is saved into the file ``schema.xml`` in the directory of the case that is under the schema. If the file is deleted, it can be rewritten by the mouse option **Write**.
+
+Object browser
+**************
+.. index:: single: object browser
+
+The object browser contains the created schemas, identified by their names. They can be edited. Under every schema, there is a link to the case and the reference to the `xml` file that is written. This file can be read.
+
+.. image:: images/create_yacs_1.png
+   :align: center
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_yacs`
+
+How to use the schema
+#####################
+
+The schema that is produced by this procedure can be imported into the module YACS. It can be executed without any modification. It this case, the stop into the loop is done:
+
+- either the maximal number of iterations for the loop (calcul,adaptation) is reached;
+- or the test for the convergence over the variable ``V_TEST`` is satisfied.
+
+By default, the maximal number of iterations is equal to 5 and the test for the convergence is satisfied if the variable varies less than one per a thousand in a relative value, between two successive iterations. These tests can be modified.
+
+These tests ares done into the node "Analyse" of the schema, as described in :doc:`yacs`.
+
+The maximal number of iterations is given by the variable `NbCalcMax`:
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 112-112
+
+The value for the test is saved in a list all along the calculations:
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 137-141
+
+and the test is calculated after the second iteration:
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 143-148
+
+If this test is modified, it must be done here. But the instructions when it is converged must be kept to guarantee a good execution:
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 146-148
+
+Examples
+########
+.. index:: single: Code_Aster
+
+A user's guide for schemas with *Code_Aster* is available here: :doc:`gui_create_yacs_aster`.
+
+
+
+
diff --git a/doc/en/gui_create_yacs_aster.rst b/doc/en/gui_create_yacs_aster.rst
new file mode 100644 (file)
index 0000000..87660e1
--- /dev/null
@@ -0,0 +1,74 @@
+.. _gui_create_yacs_aster:
+
+A schema YACS for *Code_Aster*
+##############################
+.. index:: single: YACS
+.. index:: single: Code_Aster
+
+If the schema implies a coupling between *Code_Aster* and HOMARD, some comments are included here.
+
+Preparations
+************
+The directory for the computation
+=================================
+The first phase consists in creating a directory which will gather the files of the calculation and the files of the successive meshes.
+
+Commands
+========
+The commands of the calculation are to be defined as for any calculation. The only point is about the test value for the convergence.
+
+The test value
+--------------
+To get back the test value ``V_TEST``, the script fetches in the file ``resu`` a line such as:
+::
+
+    V_TEST    0.02071983
+
+For that purpose, the best way consists in placing the test value in an entitled table ``V_TEST``, for example after an extraction from a result:
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 53-59
+
+Then print this table for the two parameters ``INTITULE`` and component:
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 63-64
+
+To drive the adaptation
+-----------------------
+If the adaptation is driven by a field, it will be necessary to write this field in the exit MED file. It can be an error indicator (CALC_ERREUR command) or another field.
+
+For example :
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 68-78
+
+The script
+==========
+The script for running *Code_Aster* to supply in the schema YACS is to be downloaded here: :download:`ScriptAster<../files/yacs_script.py>`. This file can be moved anywhere.
+
+How to do ?
+***********
+A first calculation
+===================
+As soon as the commands are correct, a first calculation has to be done. That gives the opportunity to choose the parameters: *Code_Aster* version, calculation server, interactive/batch, and so on. These parameters will be used for the successive computations. Launching *Code_Aster* gathers these informations into a file ``export``. This file must be renamed as ``calcul.ref.export`` in the directory for the computation.
+
+Creation of the schema
+======================
+When the computation is over, the following steps must be done:
+
+- to check that the result MED file was created and that the ligne with the test value is written down into the result file ``resu``;
+- to activate the module HOMARD in SALOME;
+- to create a case from the initial mesh;
+- to create an iteration based on the selected field;
+- possibly to calculate this iteration to check choices, but it is not compulsory;
+- to create the schema based on this case.
+
+To launch the schema
+====================
+The schema is written in the file ``schema.xml`` in the directory connected to the case which is the support. This file can be moved with no problem at all. The default parameters of control of the loop of the alternation (calculation/adaptation) can be modified.
+
+The module YACS is activated, the schema is imported and it is launched.
+
+
+
diff --git a/doc/en/gui_create_zone.rst b/doc/en/gui_create_zone.rst
new file mode 100644 (file)
index 0000000..fbb6282
--- /dev/null
@@ -0,0 +1,98 @@
+.. _gui_create_zone:
+
+The zone
+########
+.. index:: single: zone
+.. index:: single: 2D
+
+The object zone contains all the geometrical definitions allowing to describe a zone to be refined.
+
+In 3D, there are four types of zone:
+
+  - Box
+  - Cylinder
+  - Pipe
+  - Sphere
+
+Their analogues in 2D are:
+
+  - Rectangle
+  - Disk
+  - Disk with a hole
+
+The principle of the refinement according to zones is the following one. Every edge of element among which both extremities are included in the same zone will be cut. Then HOMARD applies the algorithm of processing of it conformity to produce a correct mesh.
+
+.. note::
+  The values proposed by default for the size of zones take into account the geometry of the mesh.
+
+Name of the zone
+****************
+A name of zone is automatically proposed: Zone_1, Zone_2, etc. This name can be modified. He must not have been already used for another zone.
+
+Box
+***
+.. index:: single: box
+
+The parallelepiped is necessarily parallel to coordinate system. It is defined by its extremes in every direction.
+
+.. image:: images/create_zone_1.png
+   :align: center
+
+Cylinder
+********
+.. index:: single: cylindre
+
+The cylinder is defined by its axis, a basis point positioned on the axis, its height and its radius. The axis is defined by a vector which must be correctly directed: we shall retain the ready volume of the basis in the direction of the vector until the reserved height. The norm of this vector is not inevitably equal to 1.
+
+.. image:: images/create_zone_2.png
+   :align: center
+
+Pipe
+****
+.. index:: single: pipe
+
+The pipe is defined by its axis, a basis point positioned on the axis, its height and its internal and external radius. The axis is defined by a vector which must be correctly directed: we shall retain the ready volume of the basis in the direction of the vector until the reserved height. The norm of this vector is not inevitably equal to 1.
+
+.. image:: images/create_zone_3.png
+   :align: center
+
+Sphere
+******
+.. index:: single: sphere
+
+The sphere is defined by its center and its radius.
+
+.. image:: images/create_zone_4.png
+   :align: center
+
+Rectangle
+*********
+.. index:: single: rectangle
+
+The rectangle is necessarily parallel to coordinate system. It is defined by its extremes in each of the valid directions. The constant coordinate is shown for information, but is not modifiable.
+
+.. image:: images/create_zone_21.png
+   :align: center
+
+Disk
+****
+.. index:: single: disk
+
+The disk is necessarily in the plan of coordinate system. It is defined by its center and its radius. The constant coordinate is shown for information, but is not modifiable.
+
+.. image:: images/create_zone_22.png
+   :align: center
+
+Disk with a hole
+****************
+.. index:: single: disk with a hole
+
+The disk with hole is necessarily in the plan of coordinate system. It is defined by its center and its external and internal radius. The constant coordinate is shown for information, but is not modifiable.
+
+.. image:: images/create_zone_23.png
+   :align: center
+
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_zone`
diff --git a/doc/en/gui_homard.rst b/doc/en/gui_homard.rst
new file mode 100644 (file)
index 0000000..6a6b6bd
--- /dev/null
@@ -0,0 +1,51 @@
+.. _gui_homard:
+
+The computation
+###############
+.. index:: single: iteration
+.. index:: single: computation
+.. index:: single: SMESH
+
+To compute an iteration
+***********************
+To launch an adaptation obtains by selecting the iteration to calculate. It is identified by an icone "wait". We choose then "*Compute*" or "*Compute and publish*" in the menu HOMARD or with the mouse. In the first case, the adaptation is done and the MED files are written down. In the second case, the new mesh will be published into SMESH. Note that if the choice "*Compute*" was used, the new mesh can be published afterwards, using the choice "*Publish*".
+
+.. image:: images/lancement_1.png
+   :align: center
+
+.. index:: single: object browser
+
+Object browser
+**************
+
+At the end of this calculation, the object browser was enriched. The icone in front of the iteration is validated. Under the iteration, we find the reference to the files of results created, identified by their name in the directory *rep* which was defined in the creation of the case:
+
+  - *rep*/I(n+1)/Liste.n.vers.(n+1).log
+  - *rep*/I(n+1)/apad.n.vers.(n+1).bilan
+  - *rep*/maill.(n+1).med
+
+The first two files are text files, editable. Liste.n.vers.(n+1).log contains information on the progress of the adaptation: summary of the mode of adaptation, percentage of concerned elements, etc. The file apad.n.vers.(n+1).bilan is a summary of the characteristics of the obtained mesh.
+
+The file maill.(n+1).med is the one which contains the mesh produced in the format MED. If the publication was selected, we find this mesh in the section of the object browser of the module SMESH. It is then visible in this module and usable then as quite different mesh.
+
+
+.. image:: images/lancement_2.png
+   :align: center
+
+To consult the result of an adaptation
+**************************************
+Both text files, Liste.n.vers.(n+1).log and apad.n.vers.(n+1).bilan, are visible by selecting them. We choose then "*Edit file*" in the menu HOMARD or with the mouse.
+
+.. image:: images/lancement_3.png
+   :align: center
+
+
+.. note::
+  By default, the calculation is launched with the load module of HOMARD installed with SALOME. If we wish to use a personal version of HOMARD, to test an evolution for example, it is necessary to specify where the new load module is available. For that purpose, it is necessary to have got two variables of environment.
+  "*HOMARD_REP_EXE_PRIVATE*" defines the directory in which is the load module
+  "*HOMARD_EXE_PRIVATE*" defines the name of the load module in this directory, if this name is different of "*homard*".
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_iteration`
+
diff --git a/doc/en/gui_mesh_info.rst b/doc/en/gui_mesh_info.rst
new file mode 100644 (file)
index 0000000..f011894
--- /dev/null
@@ -0,0 +1,92 @@
+.. _gui_mesh_info:
+
+Mesh analysis
+#############
+.. index:: single: analysis
+.. index:: single: information
+
+The request of analysis of a mesh is made by the following information:
+
+  - A directory
+  - A mesh file
+
+If the mesh is a part of a registered case, its analysis is made from its iteration in the object browser. See farther.
+
+
+Importation of the mesh
+***********************
+The selection of the function of analysis is made by the menu of the superior bar of the window:
+
+.. image:: images/mesh_info_1.png
+   :align: center
+
+The window of choice is displayed.
+
+.. image:: images/mesh_info_2.png
+   :align: center
+
+Name of the case
+****************
+A name of case is automatically proposed: Case_1, Case_2, etc. This name can be modified. He must not already have been used for another case.
+
+The directory
+*************
+The directory is the one which will contain files produced by the information. By default, nothing is proposed. The choice is made, either by typing the name in the text field, or by activating the function of research. It is in this directory that will be exported the files of information of name "Liste.log" and "info_av.00.bilan". These files will be visible in the object browser.
+
+.. image:: images/create_case_2.png
+   :align: center
+
+.. index:: single: mesh;initial
+.. index:: single: MED
+
+Mesh to be analysed
+*******************
+The mesh to be analyzed has to be in a file in the format MED. The name of the file can be supplied, either by typing the name in the text field, or by activating the function of research.
+
+.. image:: images/create_case_3.png
+   :align: center
+
+.. note::
+  The file has to contain only a single mesh.
+
+.. warning::
+  The mesh does not have to be produced of an adaptation of mesh by HOMARD itself, at the risk of losing the analysis of the various levels of refinement / unrefinement
+
+Options for the analysis
+************************
+The analysis is made according to the marked options.
+  - Quality of elements
+  - Diameter of elements
+  - Connectivity of the domain; in a single piece, how many holes, etc.
+  - Sizes of the constituents of the domain, group by group
+  - Interpenetration of elements, by dimension
+
+The result of the analysis is contained in the file "info_av.00.bilan"; this file is to be consulted by showing it after its name with "*Edit file*" in the menu HOMARD or with the mouse.
+
+Object browser
+**************
+At the end of this request of information, the object browser was enriched by this new case. We find the initial iteration there, identified by the name of the mesh which was read in the supplied file, and both files of information of name "Liste.log" and "info_av.00.bilan".
+
+.. image:: images/mesh_info_3.png
+   :align: center
+
+
+Computed iteration
+******************
+
+To analyze the mesh produced by an iteration of mesh adaptation, we indicate with the mouse this iteration in the object browser and we launch the analysis. We find the menu similar to the initial case:
+
+.. image:: images/mesh_info_4.png
+   :align: center
+
+As for an imported mesh, the object browser was enriched with both files of information of name "Liste.log" and "info_ap.xx.bilan", where xx is the number of the iteration in the case.
+
+.. image:: ../images/mesh_info_5.png
+   :align: center
+
+
+
+Corresponding python functions
+******************************
+Look :doc:`tui_create_case` and :doc:`tui_create_iteration`
+
diff --git a/doc/en/gui_usage.rst b/doc/en/gui_usage.rst
new file mode 100644 (file)
index 0000000..757189f
--- /dev/null
@@ -0,0 +1,61 @@
+.. _gui_usage:
+
+User's guide of the graphical interface
+#######################################
+.. index:: single: case
+.. index:: single: iteration
+
+Activation of the module HOMARD
+*******************************
+Two ways can be used to launch the module HOMARD:
+
+#. by activating the tab HOMARD into the list of the modules
+#. by clicking the button HOMARD into tool bar
+
+The user can choose either to start a new study or to open an old stored one, as it can be done for every module of SALOME.
+
+.. image:: images/homard_1.png
+   :align: center
+
+Definition of an adaptation
+***************************
+
+Once the activation of the module HOMARD is done, a case is created. The initial mesh of the series of adapted meshes is selected (see :doc:`gui_create_case`). From this case, the successive iterations are defined (see :doc:`gui_create_iteration`) with hypotheses (see :doc:`gui_create_hypothese`). The adaptations are launched as described in :doc:`gui_homard`.
+
+
+User's guide of the graphical interface
+***************************************
+
+.. toctree::
+   :maxdepth: 2
+
+   gui_create_case
+   gui_create_iteration
+   gui_create_hypothese
+   gui_create_zone
+   gui_create_boundary
+   gui_homard
+   gui_mesh_info
+
+
+Creation of a schema YACS
+*************************
+
+An automatic creation of a schema YACS is available in the module HOMARD.
+
+.. toctree::
+   :maxdepth: 2
+
+   gui_create_yacs
+   gui_create_yacs_aster
+
+
+Preferences
+***********
+
+Some default options for the module HOMARD are defined into the preferences.
+
+.. toctree::
+   :maxdepth: 2
+
+   preferences
diff --git a/doc/en/images/create_boundary_1.png b/doc/en/images/create_boundary_1.png
new file mode 100644 (file)
index 0000000..0460d48
Binary files /dev/null and b/doc/en/images/create_boundary_1.png differ
diff --git a/doc/en/images/create_boundary_an_1.png b/doc/en/images/create_boundary_an_1.png
new file mode 100644 (file)
index 0000000..09630eb
Binary files /dev/null and b/doc/en/images/create_boundary_an_1.png differ
diff --git a/doc/en/images/create_boundary_an_2.png b/doc/en/images/create_boundary_an_2.png
new file mode 100644 (file)
index 0000000..25c6e9b
Binary files /dev/null and b/doc/en/images/create_boundary_an_2.png differ
diff --git a/doc/en/images/create_boundary_an_3.png b/doc/en/images/create_boundary_an_3.png
new file mode 100644 (file)
index 0000000..6f38d9f
Binary files /dev/null and b/doc/en/images/create_boundary_an_3.png differ
diff --git a/doc/en/images/create_boundary_an_4.png b/doc/en/images/create_boundary_an_4.png
new file mode 100644 (file)
index 0000000..abf1042
Binary files /dev/null and b/doc/en/images/create_boundary_an_4.png differ
diff --git a/doc/en/images/create_boundary_an_co_1.png b/doc/en/images/create_boundary_an_co_1.png
new file mode 100644 (file)
index 0000000..7212cba
Binary files /dev/null and b/doc/en/images/create_boundary_an_co_1.png differ
diff --git a/doc/en/images/create_boundary_an_co_2.png b/doc/en/images/create_boundary_an_co_2.png
new file mode 100644 (file)
index 0000000..017b56d
Binary files /dev/null and b/doc/en/images/create_boundary_an_co_2.png differ
diff --git a/doc/en/images/create_boundary_an_cy.png b/doc/en/images/create_boundary_an_cy.png
new file mode 100644 (file)
index 0000000..2efc3fd
Binary files /dev/null and b/doc/en/images/create_boundary_an_cy.png differ
diff --git a/doc/en/images/create_boundary_an_sp.png b/doc/en/images/create_boundary_an_sp.png
new file mode 100644 (file)
index 0000000..be7b28b
Binary files /dev/null and b/doc/en/images/create_boundary_an_sp.png differ
diff --git a/doc/en/images/create_boundary_an_to.png b/doc/en/images/create_boundary_an_to.png
new file mode 100644 (file)
index 0000000..38e3940
Binary files /dev/null and b/doc/en/images/create_boundary_an_to.png differ
diff --git a/doc/en/images/create_boundary_di_1.png b/doc/en/images/create_boundary_di_1.png
new file mode 100644 (file)
index 0000000..8f80605
Binary files /dev/null and b/doc/en/images/create_boundary_di_1.png differ
diff --git a/doc/en/images/create_boundary_di_2.png b/doc/en/images/create_boundary_di_2.png
new file mode 100644 (file)
index 0000000..d952eda
Binary files /dev/null and b/doc/en/images/create_boundary_di_2.png differ
diff --git a/doc/en/images/create_boundary_di_3.png b/doc/en/images/create_boundary_di_3.png
new file mode 100644 (file)
index 0000000..01195a1
Binary files /dev/null and b/doc/en/images/create_boundary_di_3.png differ
diff --git a/doc/en/images/create_case_2.png b/doc/en/images/create_case_2.png
new file mode 100644 (file)
index 0000000..31ebcaa
Binary files /dev/null and b/doc/en/images/create_case_2.png differ
diff --git a/doc/en/images/create_case_3.png b/doc/en/images/create_case_3.png
new file mode 100644 (file)
index 0000000..7d61542
Binary files /dev/null and b/doc/en/images/create_case_3.png differ
diff --git a/doc/en/images/create_case_4.png b/doc/en/images/create_case_4.png
new file mode 100644 (file)
index 0000000..e419f06
Binary files /dev/null and b/doc/en/images/create_case_4.png differ
diff --git a/doc/en/images/create_case_5.png b/doc/en/images/create_case_5.png
new file mode 100644 (file)
index 0000000..9424c9c
Binary files /dev/null and b/doc/en/images/create_case_5.png differ
diff --git a/doc/en/images/create_case_6.png b/doc/en/images/create_case_6.png
new file mode 100644 (file)
index 0000000..c598729
Binary files /dev/null and b/doc/en/images/create_case_6.png differ
diff --git a/doc/en/images/create_case_7.png b/doc/en/images/create_case_7.png
new file mode 100644 (file)
index 0000000..36e323f
Binary files /dev/null and b/doc/en/images/create_case_7.png differ
diff --git a/doc/en/images/create_case_8.png b/doc/en/images/create_case_8.png
new file mode 100644 (file)
index 0000000..48dcc32
Binary files /dev/null and b/doc/en/images/create_case_8.png differ
diff --git a/doc/en/images/create_case_9.png b/doc/en/images/create_case_9.png
new file mode 100644 (file)
index 0000000..0f77cee
Binary files /dev/null and b/doc/en/images/create_case_9.png differ
diff --git a/doc/en/images/create_hypothese_1.png b/doc/en/images/create_hypothese_1.png
new file mode 100644 (file)
index 0000000..73b7d54
Binary files /dev/null and b/doc/en/images/create_hypothese_1.png differ
diff --git a/doc/en/images/create_hypothese_2.png b/doc/en/images/create_hypothese_2.png
new file mode 100644 (file)
index 0000000..fbb434b
Binary files /dev/null and b/doc/en/images/create_hypothese_2.png differ
diff --git a/doc/en/images/create_hypothese_av_1.png b/doc/en/images/create_hypothese_av_1.png
new file mode 100644 (file)
index 0000000..7df1381
Binary files /dev/null and b/doc/en/images/create_hypothese_av_1.png differ
diff --git a/doc/en/images/create_hypothese_ch_1.png b/doc/en/images/create_hypothese_ch_1.png
new file mode 100644 (file)
index 0000000..392ef7b
Binary files /dev/null and b/doc/en/images/create_hypothese_ch_1.png differ
diff --git a/doc/en/images/create_hypothese_ch_2.png b/doc/en/images/create_hypothese_ch_2.png
new file mode 100644 (file)
index 0000000..ce3d944
Binary files /dev/null and b/doc/en/images/create_hypothese_ch_2.png differ
diff --git a/doc/en/images/create_hypothese_ch_3.png b/doc/en/images/create_hypothese_ch_3.png
new file mode 100644 (file)
index 0000000..a78111d
Binary files /dev/null and b/doc/en/images/create_hypothese_ch_3.png differ
diff --git a/doc/en/images/create_hypothese_ch_4.png b/doc/en/images/create_hypothese_ch_4.png
new file mode 100644 (file)
index 0000000..b48f651
Binary files /dev/null and b/doc/en/images/create_hypothese_ch_4.png differ
diff --git a/doc/en/images/create_hypothese_ch_5.png b/doc/en/images/create_hypothese_ch_5.png
new file mode 100644 (file)
index 0000000..4151dd8
Binary files /dev/null and b/doc/en/images/create_hypothese_ch_5.png differ
diff --git a/doc/en/images/create_hypothese_gr_1.png b/doc/en/images/create_hypothese_gr_1.png
new file mode 100644 (file)
index 0000000..34f937f
Binary files /dev/null and b/doc/en/images/create_hypothese_gr_1.png differ
diff --git a/doc/en/images/create_hypothese_gr_2.png b/doc/en/images/create_hypothese_gr_2.png
new file mode 100644 (file)
index 0000000..3153ad4
Binary files /dev/null and b/doc/en/images/create_hypothese_gr_2.png differ
diff --git a/doc/en/images/create_hypothese_zo_1.png b/doc/en/images/create_hypothese_zo_1.png
new file mode 100644 (file)
index 0000000..0b4f025
Binary files /dev/null and b/doc/en/images/create_hypothese_zo_1.png differ
diff --git a/doc/en/images/create_hypothese_zo_2.png b/doc/en/images/create_hypothese_zo_2.png
new file mode 100644 (file)
index 0000000..09353cf
Binary files /dev/null and b/doc/en/images/create_hypothese_zo_2.png differ
diff --git a/doc/en/images/create_iteration_1.png b/doc/en/images/create_iteration_1.png
new file mode 100644 (file)
index 0000000..affb028
Binary files /dev/null and b/doc/en/images/create_iteration_1.png differ
diff --git a/doc/en/images/create_iteration_2.png b/doc/en/images/create_iteration_2.png
new file mode 100644 (file)
index 0000000..3c02793
Binary files /dev/null and b/doc/en/images/create_iteration_2.png differ
diff --git a/doc/en/images/create_iteration_3.png b/doc/en/images/create_iteration_3.png
new file mode 100644 (file)
index 0000000..a00ede7
Binary files /dev/null and b/doc/en/images/create_iteration_3.png differ
diff --git a/doc/en/images/create_iteration_4.png b/doc/en/images/create_iteration_4.png
new file mode 100644 (file)
index 0000000..4366530
Binary files /dev/null and b/doc/en/images/create_iteration_4.png differ
diff --git a/doc/en/images/create_iteration_5.png b/doc/en/images/create_iteration_5.png
new file mode 100644 (file)
index 0000000..92a9ab0
Binary files /dev/null and b/doc/en/images/create_iteration_5.png differ
diff --git a/doc/en/images/create_iteration_6.png b/doc/en/images/create_iteration_6.png
new file mode 100644 (file)
index 0000000..339e1e1
Binary files /dev/null and b/doc/en/images/create_iteration_6.png differ
diff --git a/doc/en/images/create_iteration_7.png b/doc/en/images/create_iteration_7.png
new file mode 100644 (file)
index 0000000..8816eef
Binary files /dev/null and b/doc/en/images/create_iteration_7.png differ
diff --git a/doc/en/images/create_yacs_01.png b/doc/en/images/create_yacs_01.png
new file mode 100644 (file)
index 0000000..4f8cebf
Binary files /dev/null and b/doc/en/images/create_yacs_01.png differ
diff --git a/doc/en/images/create_yacs_1.png b/doc/en/images/create_yacs_1.png
new file mode 100644 (file)
index 0000000..7450f9b
Binary files /dev/null and b/doc/en/images/create_yacs_1.png differ
diff --git a/doc/en/images/create_zone_01.png b/doc/en/images/create_zone_01.png
new file mode 100644 (file)
index 0000000..ce012ad
Binary files /dev/null and b/doc/en/images/create_zone_01.png differ
diff --git a/doc/en/images/create_zone_1.png b/doc/en/images/create_zone_1.png
new file mode 100644 (file)
index 0000000..aa32ef1
Binary files /dev/null and b/doc/en/images/create_zone_1.png differ
diff --git a/doc/en/images/create_zone_2.png b/doc/en/images/create_zone_2.png
new file mode 100644 (file)
index 0000000..1664d52
Binary files /dev/null and b/doc/en/images/create_zone_2.png differ
diff --git a/doc/en/images/create_zone_21.png b/doc/en/images/create_zone_21.png
new file mode 100644 (file)
index 0000000..8d156f1
Binary files /dev/null and b/doc/en/images/create_zone_21.png differ
diff --git a/doc/en/images/create_zone_22.png b/doc/en/images/create_zone_22.png
new file mode 100644 (file)
index 0000000..f27faaa
Binary files /dev/null and b/doc/en/images/create_zone_22.png differ
diff --git a/doc/en/images/create_zone_23.png b/doc/en/images/create_zone_23.png
new file mode 100644 (file)
index 0000000..8bce36d
Binary files /dev/null and b/doc/en/images/create_zone_23.png differ
diff --git a/doc/en/images/create_zone_3.png b/doc/en/images/create_zone_3.png
new file mode 100644 (file)
index 0000000..abaf406
Binary files /dev/null and b/doc/en/images/create_zone_3.png differ
diff --git a/doc/en/images/create_zone_4.png b/doc/en/images/create_zone_4.png
new file mode 100644 (file)
index 0000000..26955a8
Binary files /dev/null and b/doc/en/images/create_zone_4.png differ
diff --git a/doc/en/images/homard_1.png b/doc/en/images/homard_1.png
new file mode 100644 (file)
index 0000000..8410e47
Binary files /dev/null and b/doc/en/images/homard_1.png differ
diff --git a/doc/en/images/homard_2.png b/doc/en/images/homard_2.png
new file mode 100644 (file)
index 0000000..da3222d
Binary files /dev/null and b/doc/en/images/homard_2.png differ
diff --git a/doc/en/images/intro_1.png b/doc/en/images/intro_1.png
new file mode 100644 (file)
index 0000000..bfc3bd2
Binary files /dev/null and b/doc/en/images/intro_1.png differ
diff --git a/doc/en/images/intro_31.png b/doc/en/images/intro_31.png
new file mode 100644 (file)
index 0000000..b9a3dbc
Binary files /dev/null and b/doc/en/images/intro_31.png differ
diff --git a/doc/en/images/intro_32.png b/doc/en/images/intro_32.png
new file mode 100644 (file)
index 0000000..ada710f
Binary files /dev/null and b/doc/en/images/intro_32.png differ
diff --git a/doc/en/images/intro_33.png b/doc/en/images/intro_33.png
new file mode 100644 (file)
index 0000000..e0deca0
Binary files /dev/null and b/doc/en/images/intro_33.png differ
diff --git a/doc/en/images/intro_331.png b/doc/en/images/intro_331.png
new file mode 100644 (file)
index 0000000..9b1d46c
Binary files /dev/null and b/doc/en/images/intro_331.png differ
diff --git a/doc/en/images/intro_34.png b/doc/en/images/intro_34.png
new file mode 100644 (file)
index 0000000..94fe9a3
Binary files /dev/null and b/doc/en/images/intro_34.png differ
diff --git a/doc/en/images/intro_35.png b/doc/en/images/intro_35.png
new file mode 100644 (file)
index 0000000..8008536
Binary files /dev/null and b/doc/en/images/intro_35.png differ
diff --git a/doc/en/images/intro_36.png b/doc/en/images/intro_36.png
new file mode 100644 (file)
index 0000000..047a308
Binary files /dev/null and b/doc/en/images/intro_36.png differ
diff --git a/doc/en/images/intro_37.png b/doc/en/images/intro_37.png
new file mode 100644 (file)
index 0000000..f04c512
Binary files /dev/null and b/doc/en/images/intro_37.png differ
diff --git a/doc/en/images/intro_38.png b/doc/en/images/intro_38.png
new file mode 100644 (file)
index 0000000..925ffb6
Binary files /dev/null and b/doc/en/images/intro_38.png differ
diff --git a/doc/en/images/intro_39.png b/doc/en/images/intro_39.png
new file mode 100644 (file)
index 0000000..93953fb
Binary files /dev/null and b/doc/en/images/intro_39.png differ
diff --git a/doc/en/images/intro_8.gif b/doc/en/images/intro_8.gif
new file mode 100644 (file)
index 0000000..b11d925
Binary files /dev/null and b/doc/en/images/intro_8.gif differ
diff --git a/doc/en/images/lancement_1.png b/doc/en/images/lancement_1.png
new file mode 100644 (file)
index 0000000..340b481
Binary files /dev/null and b/doc/en/images/lancement_1.png differ
diff --git a/doc/en/images/lancement_2.png b/doc/en/images/lancement_2.png
new file mode 100644 (file)
index 0000000..9655bcb
Binary files /dev/null and b/doc/en/images/lancement_2.png differ
diff --git a/doc/en/images/lancement_3.png b/doc/en/images/lancement_3.png
new file mode 100644 (file)
index 0000000..aef0b24
Binary files /dev/null and b/doc/en/images/lancement_3.png differ
diff --git a/doc/en/images/mesh_info_1.png b/doc/en/images/mesh_info_1.png
new file mode 100644 (file)
index 0000000..7290528
Binary files /dev/null and b/doc/en/images/mesh_info_1.png differ
diff --git a/doc/en/images/mesh_info_2.png b/doc/en/images/mesh_info_2.png
new file mode 100644 (file)
index 0000000..1f86ad9
Binary files /dev/null and b/doc/en/images/mesh_info_2.png differ
diff --git a/doc/en/images/mesh_info_3.png b/doc/en/images/mesh_info_3.png
new file mode 100644 (file)
index 0000000..0419327
Binary files /dev/null and b/doc/en/images/mesh_info_3.png differ
diff --git a/doc/en/images/mesh_info_4.png b/doc/en/images/mesh_info_4.png
new file mode 100644 (file)
index 0000000..02202af
Binary files /dev/null and b/doc/en/images/mesh_info_4.png differ
diff --git a/doc/en/images/preferences_1.png b/doc/en/images/preferences_1.png
new file mode 100644 (file)
index 0000000..37022f8
Binary files /dev/null and b/doc/en/images/preferences_1.png differ
diff --git a/doc/en/images/pursue_case_1.png b/doc/en/images/pursue_case_1.png
new file mode 100644 (file)
index 0000000..53dbfff
Binary files /dev/null and b/doc/en/images/pursue_case_1.png differ
diff --git a/doc/en/images/pursue_case_2.png b/doc/en/images/pursue_case_2.png
new file mode 100644 (file)
index 0000000..397e19c
Binary files /dev/null and b/doc/en/images/pursue_case_2.png differ
diff --git a/doc/en/images/pursue_case_3.png b/doc/en/images/pursue_case_3.png
new file mode 100644 (file)
index 0000000..0692cbc
Binary files /dev/null and b/doc/en/images/pursue_case_3.png differ
diff --git a/doc/en/index.rst b/doc/en/index.rst
new file mode 100644 (file)
index 0000000..ec1519f
--- /dev/null
@@ -0,0 +1,65 @@
+.. HOMARD documentation master file, created by
+   sphinx-quickstart on Tue Jan  5 08:51:14 2010.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+.. |logo| image:: ../images/HOMARD.png
+
+Documentation of the component HOMARD |logo|
+############################################
+The component HOMARD drives the mesh adaptation inside of the SALOME plateform. This documentation is made of two parts. In the first part, named "User's guide", the driving of the module either with the graphical mode, or by a python script, or with a shema YACS is described. In the second part, named "General presentation", the characteristics of HOMARD are described with examples.
+
+User's guide
+************
+
+.. toctree::
+   :maxdepth: 1
+
+   demarrage_rapide
+   gui_usage
+   tui_usage
+   yacs
+   tutorials
+
+General presentation
+********************
+
+.. toctree::
+   :maxdepth: 1
+
+   intro
+   regles
+   divers
+
+Licence
+*******
+.. index:: single: Licence
+
+The licence for this module is the GNU Lesser General Public License (Lesser GPL), as stated here and in the source files.
+
+.. literalinclude:: ../files/licence.en.txt
+
+In addition, we expect that all publications describing work using this software, or all commercial products using it, quote at least one of the references given below:
+
+    * G. Nicolas, T. Fouquet, S. Geniaut, S. Cuvilliez, Improved Adaptive Mesh Refinement for Conformal Hexahedral Meshes, *Advances in Engineering Software*, Vol. 102, pp. 14-28, 2016, doi:10.1016/j.advengsoft.2016.07.014
+
+    * G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, *Finite Elements in Analysis and Design*, Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+    * *HOMARD, a SALOME module for Mesh Adaptation*,
+      http://www.salome-platform.org/
+
+    * *SALOME The Open Source Integration Platform for Numerical Simulation*,
+      http://www.salome-platform.org/
+
+The documentation of the module is also covered by the licence and the requirement of quoting.
+
+Index and tables
+****************
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+* :ref:`glossaire`
+
+*HOMARD is a trade mark of EDF.*
+
diff --git a/doc/en/intro.rst b/doc/en/intro.rst
new file mode 100644 (file)
index 0000000..9364bf2
--- /dev/null
@@ -0,0 +1,295 @@
+.. _intro:
+
+Introduction
+############
+
+General presentation
+********************
+The software HOMARD is intended to adapt the meshes within the framework of the computer codes by finite elements or finite volumes. This software, carried out by EDF R&D, proceeds by refinement and unrefinement of the two-dimensional or three-dimensional meshes. It is conceived to be used independently of the computer code with which it is coupled.
+
+To refine the mesh means to cut out elements indicated according to indications provided by the user. Unrefine the mesh means to reconsider behind cuttings previously carried out: thus, to in no case HOMARD cannot simplify an existing mesh which will have been created too fine. Unrefinement takes all its importance in calculations when the zone of interest moves during calculation: one will not hold any more account of refinements previously carried out and which become useless. One will find of it an illustration with the bottom of this page.
+
+HOMARD can treat meshes into 2 or 3 dimensions and comprising the following elements:
+   - mesh-points
+   - segments
+   - triangles
+   - quadrangles
+   - tetrahedra
+   - hexahedra
+   - prisms
+
+These elements can be present simultaneously. For example, HOMARD will be able to adapt a comprising mesh of the triangles and the quadrangles.
+The accepted nodes are obviously the nodes which are the vertices of the elements, which corresponds to a traditional description "in degree 1". If the elements are described "in degree 2", the additional nodes are managed. On the other hand, elements described in degree 1 and others described in degree 2 cannot be inthe same mesh. Lastly, HOMARD can take into account isolated nodes, which would not belong to any definition of elements: they will arise such as they are from the process of adaptation.
+
+The case of the pyramids is except for. For a comprising mesh of the hexahedrons or the prisms, the setting in conformity of the mesh resulting from refinement creates pyramids to ensure the connection between two areas of different levels of refinement. These pyramids are managed like all the elements of transition and are no more split thereafter. On the other hand, if the initial mesh contains pyramids, HOMARD will not be able to adapt it and will transmit an error message. In certain typical cases, one will be able nevertheless to treat such a mesh, as it is described in the heading advanced options of the creation of a case.
+
+Several motivations appear to adapt a mesh:
+
+  - one wants to simplify the realization of the mesh of a complex geometry: one starts from a coarse mesh and one entrusts to an automatic process the load to refine it.
+  - one wants to make sure of the convergence of the numerical solution: rather than to realize with the hand of the increasingly fine meshs, one lets the software seek itself the places where it would be necessary to refine the mesh to increase the precision of the result.
+  - the conditions of calculation change during time: the zones which must be with a mesh finely move. If the mesh is fine everywhere as of the beginning, the mesh is too large. While adapting progressively, the mesh will be fine only at the places necessary: its size will be reduced and the quality of the solution will be good.
+
+In all the cases, the principle of the adaptation of mesh remains the same one. On the starting mesh, one carries out standard calculation. With an analysis of the numerical solution obtained, one estimates the error which was made compared to the real solution. This estimate is represented by a value of indicator of error in each element of calculation. From there, the following principle is applied: the elements where the indicator of error is strong should be smaller and, reciprocally, the elements where the indicator of error is low could be larger. With this information, one feeds HOMARD which will modify the mesh consequently. On the new mesh, calculation then will be started again.
+
+Broadly speaking, an iteration for meshing adaptation is as shown on the figure below. The finite element software calculates the numerical solution on meshing Mk, then, from that, deduces the values for the error indicator over the whole meshing. Based on the knowledge of meshing #k and indicator #k, HOMARD generates a new meshing #k+1.
+
+.. image:: images/intro_1.png
+   :align: center
+
+The complete chain starts from the initial meshing, then incorporates successive links (calculation of indicator / adaptation).
+
+.. image:: ../images/intro_2.png
+   :align: center
+
+Some variations may exist. If no error indicator is available, another field can be used to drive the adaptation. A stress field in mechanics can be used: the refinement of the elements where the stress is high is often efficient to improve the quality of the results. It is also possible to drive the adaptation according the variation of a field from one element to its neighbours. The refinement can be filtered by zones or groups of elements.
+
+.. note::
+  For a extensive description of HOMARD, see :download:`Description of HOMARD <../files/HOMARD_0.pdf>`.
+
+.. note::
+  To quote HOMARD, please refer to:
+
+  Gérald Nicolas, Thierry Fouquet, Samuel Geniaut, Sam Cuvilliez, Improved adaptive mesh refinement for conformal hexahedral meshes, "*Advances in Engineering Software*", Vol. 102, pp. 14-28, 2016, doi:10.1016/j.advengsoft.2016.07.014
+
+  `Available here <http://dx.doi.org/10.1016/j.advengsoft.2016.07.014>`_
+
+  G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, "*Finite Elements in Analysis and Design*", Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+  `Available here <http://dx.doi.org/10.1016/j.finel.2012.11.008>`_
+
+.. index:: single: YACS
+
+.. note::
+  This alternation (computation/adaptation) suits in the :doc:`yacs` schemes.
+
+
+Methods for splitting the elements
+**********************************
+.. index:: single: splitting
+.. index:: single: conformity
+
+All in all, the process of meshing adaptation by splitting element is a two-tier process. First, all element specified by the error indicator are split. The resulting meshing is uncorrect : nodes are pending at the junction between areas to be refined, and an area to be retained. The second stage aims at solving all of these conformity problems.
+
+There are different splitting methods for the two phases. During the first phase, all of the element are split in the same manner ; this is the so-called standard splitting. During the second phase, some of the meshing conformity conflicts in the junction area are settled by the same standard splitting of element, while others are settled by special splitting.
+
+The various splitting modes have been choosen to preserve the mesh quality, all along the adaptive process.
+
+Standard splitting
+==================
+Standard element splitting is carried out with a view to restricting the number of cases. Thus, edges are split into two equal sections.
+
+To split a triangle, the three edges are split into two sections each, thus producing four similar triangles. They retain the same quality.
+
+.. image:: ../images/dec_tria_1.gif
+   :align: center
+   :alt: Découpage standard d'un triangle
+   :width: 399
+   :height: 88
+
+To split a quadrangle, the four edges are split into two sections each, thus producing four non-similar quadrangles with different quality.
+
+.. image:: ../images/dec_quad_1.png
+   :align: center
+   :alt: Découpage standard d'un quadrangle
+   :width: 399
+
+Tetrahedrons are split in eight. First, each of the triangular faces is split into 4 similar triangular faces.
+
+.. image:: ../images/dec_tetr_1.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 1
+   :width: 328
+   :height: 115
+
+Face splitting produces four tetrahedrons at the angles of the initial tetrahedron. It should be noted that the four new tetrahedrons are homothetic to the initial tetrahedron. Therefore, they retain the same qualities.
+
+.. image:: ../images/dec_tetr_2.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 2
+   :width: 201
+   :height: 159
+
+At the core of the tetrahedron, there remains a block shaped like two pyramids joined at their bases. An edge is generated using one of the three possible diagonals, then the four faces containing the edge, and two external edges.
+
+.. image:: ../images/dec_tetr_3.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 3
+   :width: 244
+   :height: 74
+
+This, in turn, creates 4 new tetrahedrons. It should be noted that they are similar two by two but that they can never be similar to the initial tetrahedron. They can therefore never have the same quality as the initial tetrahedron. However, different results are obtained, depending on the diagonal selected for splitting the internal pyramidal block. Where quality is concerned, it is always best to select the smallest of the three possible diagonals.
+
+.. image:: ../images/dec_tetr_4.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 4
+   :width: 229
+   :height: 116
+
+Hexaedrons are split in eight. Each of the quadrangular faces is split into 4 quadrangular faces. Edges are created connecting each centre of opposite faces. This generates a new point located at the centre of the hexahedron.
+
+.. image:: ../images/dec_hex.png
+   :align: center
+   :alt: Découpage standard d'un hexaèdre
+   :width: 600
+
+Pentaedrons are split in eight. Each of the quadrangular faces is split into 4 quadrangular faces and the two triangles are split into 4. Edges are created connecting each centre of quadrangular faces. Those 3 edges create 4 triangles at the centre of the pentaedron. Six quandrangular faces are created to complete the construction of the height pentaedrons.
+
+.. image:: ../images/dec.pent.png
+   :align: center
+   :alt: Découpage standard d'un pentaèdre
+   :width: 600
+
+Splitting for the conformity
+============================
+
+Splitting for conformity is applicable to the elements at the interface between two different levels of refinement. Such splitting may produce element of lower quality compared to the initial element, and in the general algorithm, one sees how this drawback is reckoned with to reduce its consequences.
+
+For triangles, one of the three edges is split in two. Its middle is joined to the opposite vertex to form two additional triangles.
+
+.. image:: ../images/dec_tria_2.png
+   :align: center
+   :alt: Découpage de conformité d'un triangle
+   :width: 424
+
+For quadrangles, three configurations exist. First, one of the four edges is split in two. Its middle is joined to the opposite vertex to form three triangles. The mesh obtained is then mixed.
+
+.. image:: ../images/dec_quad_2.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle
+   :width: 399
+
+For a quadrangle where two opposite edges are cut, the two middle points are connected. Two quadrangles are created.
+
+.. image:: ../images/dec_quad_3.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle - 2
+   :width: 424
+
+For a quadrangle where two opposite edges are cut, a new vertex is created at the centre of the quadrangle. This center point is then connected to the two middle points are connected and to the opposite vertex. Three quadrangles are created.
+
+.. image:: ../images/dec_quad_4.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle - 3
+   :width: 424
+
+For a tetrahedron with three split edges, this is possible only if the edges are concurrent. Therefore, one of the four faces is split in four. The middles of the split edges are joined to the opposite vertexes. The three other faces are thus split in two, and four tetrahedrons are created.
+
+.. image:: ../images/dec_tetr_5.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 1
+   :width: 116
+   :height: 116
+
+For a tetrahedron with two split edges, this is possible only if the edges are opposite. All the middles of these edges are joined to the other apexes, as well as the edge middles. The four faces are split in two, and four tetrahedrons are created.
+
+.. image:: ../images/dec_tetr_6.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 2
+   :width: 116
+   :height: 116
+
+For a tetrahedron with one split edge, the middle of the split edge is joined to the opposite apex, and two tetrahedrons are created.
+
+.. image:: ../images/dec_tetr_7.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 3
+   :width: 116
+   :height: 116
+
+The conformal strategy for the hexahedrons is based on tetrahedrons and pyramids. The situation depends on the number of non conformities, following the rules for the quadrangles. Here is some examples from the 66 possible situations.
+
+For an hexahedron with one face cut, we create 4 edges, 4 tetrahedrons and 5 pyramids.
+
+.. image:: ../images/hexaface.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 1 face
+   :width: 384
+   :height: 101
+
+For an hexahedron with only one edge cut, we create deux internal edges and four pyramids.
+
+.. image:: ../images/hexa1arete.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 1 arête
+   :width: 384
+   :height: 101
+
+For an hexahedron with two edges cut, we create one central point 10 edges, 12 tetrahedrons and 2 pyramids.
+
+.. image:: ../images/hexa2aretes.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 2 arêtes
+   :width: 384
+   :height: 101
+
+For an hexahedron with three edges cut, we create one central point, 11 edges and 18 tetrahedrons.
+
+.. image:: ../images/hexa3aretes.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 3 arêtes
+   :width: 384
+   :height: 101
+
+
+
+Algorithm
+*********
+.. index:: single: algorithm
+
+The strategy adopted for the algorithm in HOMARD consists in forcing splitting in four for all faces with two hanging nodes. Eventually, only the faces with non conformity points are faces where one and only edge is split. The simplest possible solution is thus used for conformity as seen before. The latter stage of conformity introduces element of modified quality compared to that of the element it originated from. This drawback remains under control as we have chosen to grant a temporary status to the conformity element: they exist to produce a meshing acceptable by the calculation softwares, but they disappear if they are required to be further split. As a consequence, quality loss does not propagate along iterations of meshing adaptation, and remains restricted in value as well as in number of element concerned.
+
+The algorithm is:
+
+   * Transfer of refining or coarsening indications over element into decisions to split or group edges, triangles and quadrangles.
+   * Removal of temporary compliance element.
+   * By considering all triangles and quadrangles from the lowest splitting level to the highest splitting level, conflict solving on refining using the basic rules.
+   * By considering all triangles and quadrangles from the lowest splitting level to the highest splitting level, conflict solving on coarsening using the basic rules.
+   * Effective generation of new meshing : standard splitting, compliance tracking.
+
+
+Some illustrations of adapted meshes
+************************************
+.. index:: single: illustration
+
+Some examples of use cases can be found on the site of `HOMARD <http://www.code-aster.org/outils/homard/en/applications.html>`_.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. image:: ../images/intro_3.png                              |
+|    :alt: Strap                                                |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_4.png                              |
+|    :alt: Pin                                                  |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_5.png                              |
+|    :align: center                                             |
+|    :alt: Hexaedron and non conformal adaptation               |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_6.png                              |
+|    :alt: Tetrahedron                                          |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_7.png                              |
+|    :alt: Hexaedron and conformal adaptation                   |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_8.gif                              |
+|    :alt: Propagation in 2D                                    |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_9.2.png                            |
+|    :alt: Refinement; level 2                                  |
+|    :align: center                                             |
+|    :scale: 80                                                 |
+| .. image:: ../images/intro_9.3.png                            |
+|    :alt: Refinement; level 3                                  |
+|    :align: center                                             |
+|    :scale: 80                                                 |
+| .. image:: ../images/intro_9.4.png                            |
+|    :alt: Refinement; level 4                                  |
+|    :align: center                                             |
+|    :scale: 80                                                 |
++---------------------------------------------------------------+
+
diff --git a/doc/en/preferences.rst b/doc/en/preferences.rst
new file mode 100644 (file)
index 0000000..9d87a11
--- /dev/null
@@ -0,0 +1,26 @@
+.. _preferences:
+
+The preferences
+###############
+.. index:: single: preferences
+
+Some default options for the module HOMARD are defined into the preferences.
+
+
+The language
+************
+The language that is selected into the general preferences of SALOME is used for the menus of the GUI.
+
+If french is selected, the messages that are produced by HOMARD are in french. Otherwise, english is used.
+
+Publication of the meshes
+*************************
+.. index:: single: publication
+
+.. image:: images/preferences_1.png
+   :align: center
+
+By default, the meshes that are read during the creation of the case or that are produced after an adaptation are not published into SMESH. This choice can be modified here.
+
+
+
diff --git a/doc/en/regles.rst b/doc/en/regles.rst
new file mode 100644 (file)
index 0000000..b4ba98a
--- /dev/null
@@ -0,0 +1,110 @@
+.. _rules:
+
+Rules
+#####
+
+Whatever method of use is selected, general rules are to be complied with in setting up the data.
+
+The initial mesh
+*******************
+.. index:: single: mesh;initial
+
+Mesh includes nodes, point-meshes, segments, triangles, quadrangles, tetrahedrons, hexahedrons and/or prisms. It may be of degree 1 or 2. It may be made up of several pieces.
+Meshes mixing volume meshed areas and surface meshed areas can definitely be processed. These areas may be adjacent or not.
+During the refining process there is no mesh adjustment. Therefore, the initial mesh should be as smooth as possible. Poor initial mesh would result in poor split meshes. Conversely, the initial mesh may be coarse. It merely needs to comply with the minimum initial conditions.
+Lastly, it would be desirable to have - from the very onset - proper representation of any curving borders. As border element splitting is carried out based on border approximation by the initial mesh, fine tracking of marked curves may not occur systematically. To remedy this, a specific module for 2D-border tracking is available.
+
+Boundary conditions on limits and sources
+*****************************************
+.. index:: single: conditions on limits
+.. index:: single: boundary conditions
+
+Defining where boundary conditions or source operands are enforced has to be carried out on entities of dimensions similar to that of the phenomenon being represented. In other words, a one-off loading should be defined on a node. For 2D calculation, the definition of behaviors on the boundary is obtained through boundary edge characterizations rather than through boundary nodes. Also, in 3D, the behaviors on the outer walls of the area to be modeled are based on the triangles or the quadrangles making up the boundary. In so doing, one is sure to properly propagate the definitions as mesh is refined.
+
+One should absolutely not use definitions of boundary conditions by nodes for this would make it impossible to properly represent the borders after adaptation. This is demonstrated in the example below.
+
+.. image:: ../images/cl_0.gif
+   :align: center
+   :width: 201
+   :height: 110
+
+A case of fluid mechanics is to be modeled here, where a flow enters then exits a cavity. This is a 2D model, and boundary conditions are defined classically, through node characterization. On the zoom drawn below, red nodes are for walls and blue nodes for inlet, while black nodes are for free nodes.
+
+.. image:: ../images/cl_1.gif
+   :align: center
+   :width: 372
+   :height: 119
+
+If the element needs to be split around the inlet area, new nodes are generated. The problem here is to find out to which category a new node located between a wall node or an inlet node belongs to. If -- left-hand side case -- the wall gets priority, everything is fine. Conversely, if -- right-hand side case -- it is the inlet that gets priority, there is a problem: this results in artificially expanding the inlet, therefore distorting the calculation!
+
+
+|cl_2| Wall ------------------------------ Inlet |cl_3|
+
+.. |cl_2| image:: ../images/cl_2.gif
+   :align: middle
+   :width: 244
+   :height: 129
+
+
+.. |cl_3| image:: ../images/cl_3.gif
+   :align: middle
+   :width: 244
+   :height: 128
+
+The management of priorities between data soon becomes impossible : exclusive conventions for all HOMARD-related calculation softwares would have to be set up, while dealing with a combination of many possibilities. Moreover, in 3D, this technique for managing priorities leads to a deadlock. Try and imagine updating characterizations for nodes resulting from the splitting of tetrahedrons in the angle of the domain. Very quickly, it becomes impossible to choose between blue, red and green.
+
+.. image:: ../images/cl_4.gif
+   :align: center
+   :width: 470
+   :height: 201
+
+The only viable solution consists in defining boundary conditions on boundary elements. Going back to our 2D example for fluid mechanics, the wall or inclet characteristics are assigned to the boundary edges. In the calculation software, the program can very easily transfer information on edges towards border summits.
+
+.. image:: ../images/cl_5.gif
+   :align: center
+   :width: 372
+   :height: 119
+
+If the mesh refinement is carried out as previously, the new edges take on the same characterization as those out of which they arise : one split wall edge results in two wall edges, and one split inlet edge results in two inlet edges. Consequently, the calculation software has no difficulty setting up the right data on border nodes.
+
+.. image:: ../images/cl_6.gif
+   :align: center
+   :width: 244
+   :height: 129
+
+The strategy for the adaptation
+*******************************
+
+There is a choice between several types of refinement and unrefinement :
+
+    * by filtering error indications through a given threshold : all of the elements involving an error superior to the high threshold are split and all of those involving an error lower than the low threshold are unrefined. Then, splitting occurs again until mesh does not contain hanging nodes.
+    * by filtering error indications through thresholds that depends on the error : all of the elements involving an error superior to the mean of the error with a shift are split. Then, splitting occurs again until mesh does not contain hanging nodes.
+    * by filtering with percentage of elements. The x% of the elements with the highest error are split and the y% with the lowest errors are unrefined.
+    * by only using the refinement process, filtering with an high threshold.
+    * vice versa by only using the unrefinement process, filtering with a low threshold.
+    * uniform; no error indicator is taken into account, and mesh is entirely split : every triangle is split into 4 sections, every quadrangle is split into 4 sections, every tetrahedron is split into 8 sections, every prism is split into 8 sections, and every hexahedron is split into 8 sections. Beware! The resulting mesh volume may be huge.
+
+The error indicator
+*******************
+.. index:: single: error indicator
+
+Most of the time, the error indicator is a real-value field defined by element. It is one of the results of the calculation software. The selection of the elements to be split is carried out by comparing the value of the indicator to a given threshold.
+HOMARD accommodates two extensions to this standard: an error indicator expressed on node and/or error indicator under integer form. Whenever the indicator is provided over a node, HOMARD assigns the highest error value encountered on the element nodes to each element. Whenever the indicator is under integer form, the convention is that 1 is for refinement requests and 0 for no action.
+There is no requirement to provide a value for each and every element: if no value is assigned to an element, HOMARD treats this element according to the preferences of the case.
+
+The interpolation of the fields
+*******************************
+.. index:: single: interpolation
+.. index:: single: field
+
+HOMARD is able to update fields which are expressed over the mesh. Two cases are available :
+
+    * If the field is expressed by nodes, HOMARD will produce a new field by node, following this method. When a node is active in both meshes, before and after adaptation, the field value is kept. If the node is new, the value of the field is obtained from its values over neighbours, interpolating the field according to the mesh degree and to the choice P1, P2 or iso-P2.
+    * If the field is expressed as a constant by element, HOMARD will produce a new field by element. The method depends on the characteristics of the field: intensive, as a density, or extensive, as a mass. When the element is active in both elements, before and after adaptation, the field value is kept. If the element is produced by element cutting, the field value is the one of the parent element in the case 'intensive'; it is the value with the ratio of the volumes of parent and child elements in the case 'extensive'. If the element is produced by mesh coarsening, the field value is the mean value over the previous child elements in the case 'intensive'; it is the sum of the values over the previous child elements with the ratio of the volumes of parent and child elements in the case 'extensive'.
+
+These updating techniques are based on scalar fields. If a vector field is transmitted to HOMARD through the MED files, each component is considered as a independent scalar field. Then, the new vector field is built, gathering all the new scalar components.
+
+
+
+
+
diff --git a/doc/en/tui_create_boundary.rst b/doc/en/tui_create_boundary.rst
new file mode 100644 (file)
index 0000000..1a33efc
--- /dev/null
@@ -0,0 +1,182 @@
+.. _tui_create_boundary:
+
+The boundary
+############
+
+.. index:: single: boundary
+.. index:: single: cylinder
+.. index:: single: sphere
+
+The variables are described in :doc:`gui_create_boundary`.
+
+Methods of the class homard
+***************************
+These methods returns an instance of the class boundary.
+
++----------------------------------------------------------------------------------------+
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryDi                                                           |
+|                                                                                        |
+| **CreateBoundaryDi(boundary_name, mesh_name, mesh_file)**                              |
+|     Returns an instance of the class ``boundary``, type discrete after its creation    |
+|                                                                                        |
+|     - ``boundary_name``: the name of the discrete boundary                             |
+|     - ``mesh_name``: the name of the mesh of the boundary                              |
+|     - ``mesh_file``: the name of the file for this mesh                                |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryCylinder                                                     |
+|                                                                                        |
+| **CreateBoundaryCylinder(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, R)**       |
+|     Returns an instance of the class ``boundary`` analytical type cylindrical          |
+|     after its creation                                                                 |
+|                                                                                        |
+|     - ``boundary_name``: the name of the analytical boundary based on a cylinder       |
+|     - ``Xcen``, ``Ycen``, ``Zcen``: coordinates of a point on the axis of the cylinder |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe``: vector of the axis                                 |
+|     - ``R``: radius of the cylinder                                                    |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundarySphere                                                       |
+|                                                                                        |
+| **CreateBoundarySphere(boundary_name, Xcen, Ycen, Zcen, R)**                           |
+|     Returns an instance of the class ``boundary`` analytical type spherical            |
+|     after its creation                                                                 |
+|                                                                                        |
+|     - ``boundary_name``: the name of the boundary analytique based on a sphere         |
+|     - ``Xcen``, ``Ycen``, ``Zcen``: coordinates of the centre of the sphere            |
+|     - ``R``: radius of the sphere                                                      |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryConeA                                                        |
+|                                                                                        |
+| **CreateBoundaryConeA(boundary_name, Xaxe, Yaxe, Zaxe, Angle, Xcen, Ycen, Zcen)**      |
+|     Returns an instance of the class ``boundary`` analytical type conical              |
+|     after its creation                                                                 |
+|                                                                                        |
+|     - ``boundary_name``: the name of the boundary analytique based on a cone           |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe``: vector of the axis                                 |
+|     - ``Angle``: opening angle of the cone in degree (between 0 and 90)                |
+|     - ``Xcen``, ``Ycen``, ``Zcen``: coordinates of the centre of the cone              |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryConeR                                                        |
+|                                                                                        |
+| **CreateBoundaryConeR(boundary_name, Xc1, Yc1, Zc1, R1, Xc2, Yc2, Zc2, R2)**           |
+|     Returns an instance of the class ``boundary`` analytical type conical              |
+|     after its creation                                                                 |
+|                                                                                        |
+|     - ``boundary_name``: the name of the boundary analytique based on a cone           |
+|     - ``Xc1``, ``Yc1``, ``Zc1``: coordinates of the first centre of the cone           |
+|     - ``R1``: radius of the cone at the first centre of the cone                       |
+|     - ``Xc2``, ``Yc2``, ``Zc2``: coordinates of the second centre of the cone          |
+|     - ``R2``: radius of the cone at the second centre of the cone                      |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryTorus                                                        |
+|                                                                                        |
+| **CreateBoundaryTorus(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, RRev, RPri)** |
+|     Returns an instance of the class ``boundary`` analytical type torus                |
+|     after its creation                                                                 |
+|                                                                                        |
+|     - ``boundary_name``: the name of the analytical boundary based on a torus          |
+|     - ``Xcen``, ``Ycen``, ``Zcen``: coordinates of the centre of the torus             |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe``: vector of the axis                                 |
+|     - ``RRev``: revolution radius of the torus                                         |
+|     - ``RPri``: primary radius of the torus                                            |
++----------------------------------------------------------------------------------------+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetBoundary                                       |
+|                                                               |
+| **GetBoundary(boundary_name)**                                |
+|     Returns the instance of the class classe ``boundary``     |
+|     known by its name                                         |
+|                                                               |
+|     - ``boundary_name``: the name of the boundary             |
++---------------------------------------------------------------+
+| .. module:: GetAllBoundarysName                               |
+|                                                               |
+| **GetAllBoundarysName()**                                     |
+|     Returns the list of the names of all the existing         |
+|     boundaries                                                |
+|                                                               |
++---------------------------------------------------------------+
+
+Methods of the class cas
+************************
+See also in :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddBoundaryGroup                                  |
+|                                                               |
+| **AddBoundaryGroup(boundary, group)**                         |
+|     Add a boundary to the definition of a case                |
+|                                                               |
+|     - ``boundary``: name of the curved boundary               |
+|                                                               |
+|     Discrete boundary:                                        |
+|                                                               |
+|     . if all the curved lines are involved, the second        |
+|     argument is an empty string.                              |
+|                                                               |
+|     . if only some curved lines are involved, ``group`` is    |
+|     the name of the group of segments                         |
+|                                                               |
+|     Analytical boundary:                                      |
+|                                                               |
+|     - ``group``: name of the groupe of faces located on the   |
+|       boundary                                                |
++---------------------------------------------------------------+
+
+Methods of the class boundary
+*****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the boundary                          |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Returns the type of the boundary:                         |
+|                                                               |
+|         * 0: discrete                                         |
+|         * 1: cylinder                                         |
+|         * 2: sphere                                           |
+|         * 3: cone defined by an axis and an angle             |
+|         * 4: cone defined by 2 radius                         |
+|         * 5: torus                                            |
++---------------------------------------------------------------+
+| .. module:: GetCoords                                         |
+|                                                               |
+| **GetCoords()**                                               |
+|     Returns the array of the coordinates of the boundary      |
+|     with the same order as in its definition with             |
+|     CreateBoundaryXXXX                                        |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Deletes the boundary.                                     |
+|     If the boundary is discrete, the file of the mesh is kept.|
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+
+
+Example
+*******
+Creation of a discrete boundary, a spherical boundary, and a cylindrical boundary:
+::
+
+    inter = homard.CreateBoundaryDi("INTERSECTION", 'PIQUAGE', dircase+'/tutorial_4.fr.med')
+    fron_1 = homard.CreateBoundarySphere("FRON_1", 12.3, 3.4, .56, 6.5)
+    fron_2 = homard.CreateBoundaryCylinder('CYL_1', 0.0, 25., -25., 25., 50., 75., 100.)
+
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_boundary`
diff --git a/doc/en/tui_create_case.rst b/doc/en/tui_create_case.rst
new file mode 100644 (file)
index 0000000..b0151a2
--- /dev/null
@@ -0,0 +1,283 @@
+.. _tui_create_case:
+
+The case
+########
+.. index:: single: cas
+.. index:: single: type of conformity
+.. index:: single: mesh;initial
+
+The variables are described in :doc:`gui_create_case`.
+
+Methods of the class homard
+***************************
+
+Creation of a case
+==================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateCase                                        |
+|                                                               |
+| **CreateCase(case_name, mesh_name, mesh_file)**               |
+|     Returns an instance of the class ``cas`` after its        |
+|     creation                                                  |
+|                                                               |
+|     - ``case_name``: the name of the case                     |
+|     - ``mesh_name``: the name of the initial mesh             |
+|     - ``mesh_file``: the name of the MED file of this mesh    |
+|                                                               |
+| Default:                                                      |
+|                                                               |
+|  * the directory for the results is ``/tmp``                  |
+|  * the adaptation is conformal                                |
++---------------------------------------------------------------+
+| .. module:: GetCase                                           |
+|                                                               |
+| **GetCase(case_name)**                                        |
+|     Returns an instance of the class ``cas`` known by its name|
+|                                                               |
+|     - ``case_name``: the name of the case                     |
++---------------------------------------------------------------+
+| .. module:: GetAllCasesName                                   |
+|                                                               |
+| **GetAllCasesName()**                                         |
+|     Returns the liste of the name of all the existing cases   |
+|                                                               |
++---------------------------------------------------------------+
+
+Creation of a case by pursuit of a computed iteration
+=====================================================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromIteration                           |
+|                                                               |
+| **CreateCaseFromIteration(case_name, dir_name)**              |
+|     Returns an instance of the class ``cas`` after its        |
+|     creation                                                  |
+|                                                               |
+|     - ``case_name``: the name of the case                     |
+|     - ``dir_name``: the name of the directory that contains   |
+|       the iteration                                           |
+|                                                               |
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromCaseLastIteration                   |
+|                                                               |
+| **CreateCaseFromCaseLastIteration(case_name, dir_name)**      |
+|     Returns an instance of the class ``cas`` after its        |
+|     creation                                                  |
+|                                                               |
+|     - ``case_name``: the name of the case                     |
+|     - ``dir_name``: the name of the directory that contains   |
+|       the case                                                |
+|                                                               |
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromCaseIteration                       |
+|                                                               |
+| **CreateCaseFromCaseIteration(case_name, dir_name, number)**  |
+|     Returns an instance of the class ``cas`` after its        |
+|     creation                                                  |
+|                                                               |
+|     - ``case_name``: the name of the case                     |
+|     - ``dir_name``: the name of the directory that contains   |
+|       the case                                                |
+|     - ``number``: the number of the iteration of the case     |
+|                                                               |
++---------------------------------------------------------------+
+
+
+
+Methods of the class cas
+************************
+.. index:: single: YACS
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the case                              |
++---------------------------------------------------------------+
+| .. module:: SetDirName                                        |
+|                                                               |
+| **SetDirName(dirname)**                                       |
+|     Gives a directory for the results of the case. It can be  |
+|     done only after the creation of the case and before the   |
+|     first computation.                                        |
+|                                                               |
+|     - ``dirname``: the name of the directory of the results   |
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Returns the name of the directory of the results of the   |
+|     case                                                      |
++---------------------------------------------------------------+
+| .. module:: SetConfType                                       |
+|                                                               |
+| **SetConfType(conf_type)**                                    |
+|     Defines the type of conformity for the case               |
+|                                                               |
+|     - ``conf_type``: integer as follows:                      |
+|                                                               |
+|         * 0: conformal (default)                              |
+|         * 1: non conformal with at max 2 cut edges per element|
+|         * 2: non conformal with one hanging node per edge of  |
+|           element                                             |
+|         * 3: non conformal without any constraint             |
+|         * -1: conformal with boxes (no staircases)            |
+|         * -2: non-conformal with boxes (no staircases)        |
++---------------------------------------------------------------+
+| .. module:: GetConfType                                       |
+|                                                               |
+| **GetConfType()**                                             |
+|     Returns the type of conformity                            |
++---------------------------------------------------------------+
+| .. module:: SetExtType                                        |
+|                                                               |
+| **SetExtType(ext_type)**                                      |
+|     Defines the external type for the case                    |
+|                                                               |
+|     - ``ext_type`` : integer as follows:                      |
+|                                                               |
+|         * 0 : Standard MED (default)                          |
+|         * 1 : Saturne MED                                     |
+|         * 2 : Saturne 2D MED                                  |
++---------------------------------------------------------------+
+| .. module:: GetExtType                                        |
+|                                                               |
+| **GetExtType()**                                              |
+|     Returns the external type for the case                    |
++---------------------------------------------------------------+
+| .. module:: GetIter0                                          |
+|                                                               |
+| **GetIter0()**                                                |
+|     Returns the iteration linked to the initial mesh.         |
+|     This iteration is automatically created by the module     |
+|     HOMARD. It is used to connect the iterations. It is       |
+|     connected to an initial mesh or to the iteration of a     |
+|     previous case.                                            |
++---------------------------------------------------------------+
+| .. module:: AddBoundaryGroup                                  |
+|                                                               |
+| **AddBoundaryGroup(boundary, group)**                         |
+|     Add a boundary to the definition of a case                |
+|                                                               |
+|     - ``boundary``: name of the curved boundary               |
+|                                                               |
+|     Discrete boundary:                                        |
+|                                                               |
+|     . if all the curved lines are involved, the second        |
+|     argument is an empty string.                              |
+|     . if only some curved lines are involved, ``group`` is    |
+|     the name of the group of segments                         |
+|                                                               |
+|     Analytical boundary:                                      |
+|                                                               |
+|     - ``group``: name of the group of faces located on the    |
+|       boundary                                                |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Deletes the case and all the connected iterations. The MED|
+|     file of the first mesh is kept.                           |
+|                                                               |
+|     - ``option``: an integer to define what to do with the    |
+|       MED file of the associated meshes                       |
+|                                                               |
+|         * 0: the files are kept                               |
+|         * 1: the files are removed                            |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+| .. module:: GetState                                          |
+|                                                               |
+| **GetState()**                                                |
+|     Returns the state of the case:                            |
+|         * 0: corresponds to an initial mesh                   |
+|         * other value: pursuit of an iteration with number n  |
++---------------------------------------------------------------+
+| .. module:: WriteYACSSchema                                   |
+|                                                               |
+| **WriteYACSSchema(ScriptFile, DirName, MeshFile)**            |
+|     Writes a schema YACS relative to the case.                |
+|                                                               |
+|     - ``ScriptFile`` : name of the file that contains the     |
+|       script to launch the computation                        |
+|     - ``DirName`` : the directory for the computation         |
+|     - ``MeshFile`` : name of the file that contains the mesh  |
+|       for the very first computation                          |
++---------------------------------------------------------------+
+
+Advanced options
+****************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetPyram                                          |
+|                                                               |
+| **SetPyram(option)**                                          |
+|     Defines the status of the pyramids in this case           |
+|                                                               |
+|     - ``option``: integer that defines the status of the      |
+|       pyramids that could belongs to the initial mesh         |
+|                                                               |
+|         * 0: rejected pyramids (default)                      |
+|         * 1: authorized pyramids                              |
++---------------------------------------------------------------+
+| .. module:: GetPyram                                          |
+|                                                               |
+| **GetPyram()**                                                |
+|     Returns the status of the pyramids in this case           |
++---------------------------------------------------------------+
+
+Informations for the initial mesh
+*********************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: MeshInfo                                          |
+|                                                               |
+| **MeshInfo(Qual, Diam, Conn, Tail, Inte)**                    |
+|     Gives information about the current mesh. For every       |
+|     option, the choice #0 corresponds to 'no action', while   |
+|     the choice #1 launches the option.                        |
+|                                                               |
+|     - ``Qual``: quality of the elements                       |
+|     - ``Diam``: diametre of the elements                      |
+|     - ``Conn``: connexity of the domain; a single block, how  |
+|       many holes, etc.                                        |
+|     - ``Tail``: size of the parts of the domain, group by     |
+|       group                                                   |
+|     - ``Inte``: staggered elements, by dimension              |
++---------------------------------------------------------------+
+
+
+Example
+*******
+The creation of the object case_1 is done as follows:
+
+::
+
+    case_name = "CAS_1"
+    mesh_name = "MAILL"
+    mesh_file = "/scratch/Salome/Adapt/m0.med"
+    case_1 = homard.CreateCase(case_name, mesh_name, mesh_file)
+    dirname = "/scratch/Salome/Adapt/resu"
+    case_1.SetDirName(dirname)
+    case_1.SetConfType(1)
+    case_1.AddBoundaryGroup( 'intersection', '' )
+    case_1.AddBoundaryGroup( 'cyl_1', 'T1_EXT' )
+    case_1.AddBoundaryGroup( 'cyl_1', 'T2_EXT' )
+    case_1.AddBoundaryGroup( 'cyl_2', 'T_INT' )
+
+
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_case`
+
+
diff --git a/doc/en/tui_create_hypothese.rst b/doc/en/tui_create_hypothese.rst
new file mode 100644 (file)
index 0000000..58edf27
--- /dev/null
@@ -0,0 +1,455 @@
+.. _tui_create_hypothese:
+
+The hypothesis
+##############
+
+.. index:: single: iteration
+.. index:: single: hypothesis
+.. index:: single: zone
+
+The variables are described in :doc:`gui_create_hypothese`.
+
+Methods of the class homard
+***************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateHypothesis                                  |
+|                                                               |
+| **CreateHypothesis(hypo_name)**                               |
+|     Returns an instance of the class ``hypothese``            |
+|                                                               |
+|     - ``hypo_name``: the name of the hypothesis               |
++---------------------------------------------------------------+
+| .. module:: GetHypothesis                                     |
+|                                                               |
+| **GetHypothesis(hypo_name)**                                  |
+|     Returns an instance of the class ``hypothese``            |
+|     known by its name                                         |
+|                                                               |
+|     - ``hypo_name``: the name of the hypothesis               |
++---------------------------------------------------------------+
+| .. module:: GetAllHypothesesName                              |
+|                                                               |
+| **GetAllHypothesesName()**                                    |
+|     Returns the liste of the name of all the existing         |
+|     hypotheses                                                |
+|                                                               |
++---------------------------------------------------------------+
+
+Methods of the class hypothese
+******************************
+
+General methods
+===============
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the hypothesis                        |
++---------------------------------------------------------------+
+| .. module:: GetAdapType                                       |
+|                                                               |
+| **GetAdapType()**                                             |
+|     Returns the type of the adaptation                        |
+|                                                               |
+|         * -1: uniform                                         |
+|         * 0: by zones                                         |
+|         * 1: by a field                                       |
++---------------------------------------------------------------+
+| .. module:: GetRefinType                                      |
+|                                                               |
+| **GetRefinType()**                                            |
+|     Returns the type of the refinement                        |
+|                                                               |
+|         * 0: unactive                                         |
+|         * 1: active                                           |
++---------------------------------------------------------------+
+| .. module:: GetUnRefType                                      |
+|                                                               |
+| **GetUnRefType()**                                            |
+|     Returns the type of the unrefinement                      |
+|                                                               |
+|         * 0: unactive                                         |
+|         * 1: active                                           |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Deletes the hypothesis                                    |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+
+Uniform adaptation
+==================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetUnifRefinUnRef                                 |
+|                                                               |
+| **SetUnifRefinUnRef(RefinUnRef)**                             |
+|     Defines a type of adaptation for the whole mesh           |
+|                                                               |
+|     - ``RefinUnRef``: integer that defines the                |
+|       type of adaptation                                      |
+|                                                               |
+|         * 1: refinement                                       |
+|         * -1: unrefinement                                    |
++---------------------------------------------------------------+
+
+Adaptation by a field
+=====================
+
+The driving field and the thresholds
+------------------------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetField                                          |
+|                                                               |
+| **SetField(FieldName)**                                       |
+|     Gives the name of a driving field to the hypothesis       |
+|                                                               |
+|     - ``FieldName``: the name of the driving field            |
++---------------------------------------------------------------+
+| .. module:: GetFieldName                                      |
+|                                                               |
+| **GetFieldName()**                                            |
+|     Returns the name of the driving field                     |
++---------------------------------------------------------------+
+| .. module:: SetUseField                                       |
+|                                                               |
+| **SetUseField(use_field)**                                    |
+|     Gives the usage of the driving field                      |
+|                                                               |
+|     - ``use_field``: integer that defines how the driving     |
+|       field is used                                           |
+|                                                               |
+|        * 0: value by element (default)                        |
+|        * 1: jump between an element and its neighbours        |
++---------------------------------------------------------------+
+| .. module:: SetRefinThr                                       |
+|                                                               |
+| **SetRefinThr(type_thres, threshold)**                        |
+|     Defines the thresholds for the refinement                 |
+|                                                               |
+|     - ``type_thres``: integer that defines the type of the    |
+|       threshold for the refinement                            |
+|                                                               |
+|        * 1: absolute value                                    |
+|        * 2: relative value in %                               |
+|        * 3: ratio of elements in %                            |
+|        * 4: mean + n times the standard deviation             |
+|                                                               |
+|     - ``threshold``: numerical value that defines the         |
+|       threshold                                               |
++---------------------------------------------------------------+
+| .. module:: GetRefinThrType                                   |
+|                                                               |
+| **GetRefinThrType()**                                         |
+|     Returns the type of the threshold for the refinement      |
++---------------------------------------------------------------+
+| .. module:: SetUnRefThr                                       |
+|                                                               |
+| **SetUnRefThr(type_thres, threshold)**                        |
+|     Defines the thresholds for the unrefinement               |
+|                                                               |
+|     - ``type_thres``: integer that defines the type of the    |
+|       threshold for the unrefinement                          |
+|                                                               |
+|        * 1: absolute value                                    |
+|        * 2: relative value in %                               |
+|        * 3: ratio of elements in %                            |
+|        * 4: mean - n times the standard deviation             |
+|                                                               |
+|     - ``threshold``: numerical value that defines the         |
+|       threshold                                               |
++---------------------------------------------------------------+
+| .. module:: GetUnRefThrType                                   |
+|                                                               |
+| **GetUnRefThrType()**                                         |
+|     Returns the type of the threshold for the unrefinement    |
++---------------------------------------------------------------+
+
+
+The components of the driving field
+-----------------------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddComp                                           |
+|                                                               |
+| **AddComp(comp_name)**                                        |
+|     Add a component of the field                              |
+|                                                               |
+|     - ``comp_name``: name of a component to take into account |
+|                                                               |
+|     Note: if this method is not used, every component         |
+|     of the field is taken into account.                       |
++---------------------------------------------------------------+
+| .. module:: SetUseComp                                        |
+|                                                               |
+| **SetUseComp(use_comp)**                                      |
+|     Defines hom to use the components                         |
+|                                                               |
+|     - ``use_comp``: integer that defines how to use the       |
+|       components                                              |
+|                                                               |
+|        * 0: L2 norm (default)                                 |
+|        * 1: infinite norm                                     |
+|        * 2: relative value, if only one component             |
++---------------------------------------------------------------+
+| .. module:: GetComps                                          |
+|                                                               |
+| **GetComps()**                                                |
+|     Returns the list of the used components                   |
++---------------------------------------------------------------+
+| .. module:: SupprComp                                         |
+|                                                               |
+| **SupprComp(comp_name)**                                      |
+|     Eliminates a component of the field                       |
+|                                                               |
+|     - ``comp_name``: name of a component to eliminate         |
++---------------------------------------------------------------+
+| .. module:: SupprComps                                        |
+|                                                               |
+| **SupprComps()**                                              |
+|     Eliminates all the components of the field                |
++---------------------------------------------------------------+
+
+
+Adaptation by zones
+===================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddZone                                           |
+|                                                               |
+| **AddZone(zone_name, type_use)**                              |
+|                                                               |
+|     - ``zone_name``: the name of the zone to add              |
+|     - ``type_use``: integer that defines how to use the zone  |
+|                                                               |
+|         * 1: refinement                                       |
+|         * -1: unrefinement                                    |
++---------------------------------------------------------------+
+| .. module:: GetZones                                          |
+|                                                               |
+| **GetZones()**                                                |
+|     Returns the list of the used zones with their uses        |
+|                                                               |
+|     Warning: the use is stored as a string in the list and    |
+|     not as an integer.                                        |
+|                                                               |
+|     Example: ['Zone_A', '1', 'Zone_B', '1', 'Zone_C', '1']    |
++---------------------------------------------------------------+
+| .. module:: SupprZone                                         |
+|                                                               |
+| **SupprZone(zone_name)**                                      |
+|     Eliminates a zone from the hypothesis                     |
+|                                                               |
+|     - ``zone_name``: name of a zone to eliminate              |
++---------------------------------------------------------------+
+| .. module:: SupprZones                                        |
+|                                                               |
+| **SupprZones()**                                              |
+|     Eliminates all the zones from the hypothesis              |
++---------------------------------------------------------------+
+
+
+The filtering by the groups
+===========================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddGroup                                          |
+|                                                               |
+| **AddGroup(group_name)**                                      |
+|     Add a group to the filtering                              |
+|                                                               |
+|     - ``group_name``: name of the group to take into account  |
++---------------------------------------------------------------+
+| .. module:: GetGroups                                         |
+|                                                               |
+| **GetGroups()**                                               |
+|     Returns the mist of the groups that are used in the       |
+|     filtering                                                 |
++---------------------------------------------------------------+
+
+Interpolation of fields
+=======================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetTypeFieldInterp                                |
+|                                                               |
+| **SetTypeFieldInterp(typefieldinterp)**                       |
+|                                                               |
+|     - ``typefieldinterp``: integer that defines if some fields|
+|       are interpolated or not                                 |
+|                                                               |
+|         * 0: no field (default)                               |
+|         * 1: every field is interpolated                      |
+|         * 2: some fields are interpolated; automatically set  |
+|           after using AddFieldInterp or AddFieldInterpType    |
++---------------------------------------------------------------+
+| .. module:: GetTypeFieldInterp                                |
+|                                                               |
+| **GetTypeFieldInterp()**                                      |
+|     Returns the integer that defines if some fields are       |
+|     interpolated or not                                       |
++---------------------------------------------------------------+
+| .. module:: AddFieldInterp                                    |
+|                                                               |
+| **AddFieldInterp(FieldName)**                                 |
+|                                                               |
+|     - ``FieldName``: the name of the field to interpolate     |
+|                                                               |
+|     The interpolation type is automatically deduced by        |
+|     HOMARD; it corresponds to the type 0 of AddFieldInterpType|
++---------------------------------------------------------------+
+| .. module:: AddFieldInterpType                                |
+|                                                               |
+| **AddFieldInterpType(FieldName, type_interp)**                |
+|                                                               |
+|     - ``FieldName``: the name of the field to interpolate     |
+|     - ``type_interp``: integer that defines the type of       |
+|       interpolation                                           |
+|                                                               |
+|     For a field over the nodes:                               |
+|                                                               |
+|         * 0: the field will be interpolated in degree 1 or 2  |
+|           depending on its baseframe.                         |
+|         * 1: interpolation en degree 1                        |
+|         * 2: interpolation en degree 2                        |
+|         * 3: interpolation iso-P2                             |
+|                                                               |
+|     For a field over the elements:                            |
+|                                                               |
+|         * 0: the field will be interpolated as an intensive   |
+|           variable                                            |
+|         * 1: the field will be interpolated as an extensive   |
+|           variable                                            |
++---------------------------------------------------------------+
+| .. module:: GetFieldInterps                                   |
+|                                                               |
+| **GetFieldInterps()**                                         |
+|     Returns the list of the interpolated fields with their use|
+|                                                               |
+|     Warning: the use is stored as a string in the list and    |
+|     not as an integer.                                        |
+|                                                               |
+|     Example: ['DEPL', '0', 'Mass', '1', 'Density', '0']       |
++---------------------------------------------------------------+
+| .. module:: SupprFieldInterp                                  |
+|                                                               |
+| **SupprFieldInterp(FieldName)**                               |
+|     Eliminates a field from the hypothesis                    |
+|                                                               |
+|     - ``FieldName``: name of a field to eliminate             |
++---------------------------------------------------------------+
+| .. module:: SupprFieldInterps                                 |
+|                                                               |
+| **SupprFieldInterps()**                                       |
+|     Eliminates all the fields from the hypothesis             |
++---------------------------------------------------------------+
+
+.. note::
+  The file and the time steps for the fiels are defined with the iteration; see :doc:`tui_create_iteration`.
+
+Advanced options
+================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetNivMax                                         |
+|                                                               |
+| **SetNivMax(nivmax)**                                         |
+|     Defines the maximum level for the refinement              |
+|                                                               |
+|     - ``nivmax``: level of refinement that must not be        |
+|       exceeded                                                |
++---------------------------------------------------------------+
+| .. module:: GetNivMax                                         |
+|                                                               |
+| **GetNivMax()**                                               |
+|     Returns the maximum level for the refinement              |
++---------------------------------------------------------------+
+| .. module:: SetDiamMin                                        |
+|                                                               |
+| **SetDiamMin(diammin)**                                       |
+|     Defines the minimum diameter of the future elements       |
+|                                                               |
+|     - ``diammin``: minimum diameter for an element            |
++---------------------------------------------------------------+
+| .. module:: GetDiamMin                                        |
+|                                                               |
+| **GetDiamMin()**                                              |
+|     Returns the minimum diameter of the future elements       |
++---------------------------------------------------------------+
+| .. module:: SetAdapInit                                       |
+|                                                               |
+| **SetAdapInit(option)**                                       |
+|     Defines the treatment of the elements where the field that|
+|     governs the adaptation is not defined                     |
+|                                                               |
+|     - ``option``: integer as follows:                         |
+|                                                               |
+|         *  0: no effect (default)                             |
+|         *  1: the elements without field are refined          |
+|         * -1: the elements without field are unrefined        |
++---------------------------------------------------------------+
+| .. module:: GetAdapInit                                       |
+|                                                               |
+| **GetAdapInit()**                                             |
+|     Returns the treatment of the elements where the field that|
+|     governs the adaptation is not defined                     |
++---------------------------------------------------------------+
+| .. module:: SetExtraOutput                                    |
+|                                                               |
+| **SetExtraOutput(option)**                                    |
+|     Acts if some extra information are required into the      |
+|     output MED file. The option is a product of               |
+|     2, 3, 5, 7, 11.                                           |
+|                                                               |
+|     - ``option``: integer as follows:                         |
+|                                                               |
+|         *  1 : no effect (default)                            |
+|         *  2x : the refinement level of every mesh is produced|
+|         *  3x : the quality of every mesh                     |
+|         *  5x : the diameter of every mesh                    |
+|         *  7x : common parent of every mesh                   |
+|         * 11x : neighbours of glued cells                     |
++---------------------------------------------------------------+
+| .. module:: GetExtraOutput                                    |
+|                                                               |
+| **GetExtraOutput()**                                          |
+|     Returns the choice for the output of extra information    |
++---------------------------------------------------------------+
+
+
+Example
+*******
+The creation of the object hypo_1 is done as follows:
+::
+
+    hypo_1 = homard.CreateHypothesis("HypoField")
+    hypo_1.SetField("INDICATEUR")
+    hypo_1.AddComp("INDX")
+    hypo_1.AddComp("INDZ")
+    hypo_1.SetRefinThr(1, 80.)
+    hypo_1.AddFieldInterp("DEPL")
+    hypo_1.AddFieldInterpType("MASS", 1)
+
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_hypothese`
+
+.. warning::
+  With the graphical input mode, if an hypothesis is edited and if one of the characteristic is modified, the value of the threshold for the refinement for example, all the iterations that were computed with this hypothesis are unvalidated. In python mode, that is not true: the iterations stay as they are.
diff --git a/doc/en/tui_create_iteration.rst b/doc/en/tui_create_iteration.rst
new file mode 100644 (file)
index 0000000..8309374
--- /dev/null
@@ -0,0 +1,384 @@
+.. _tui_create_iteration:
+
+The iteration
+#############
+
+.. index:: single: iteration
+.. index:: single: hypothesis
+.. index:: single: zone
+
+The variables are described in :doc:`gui_create_iteration`.
+
+Methods of the class homard
+***************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetIteration                                      |
+|                                                               |
+| **GetIteration(iter_name)**                                   |
+|     Returns an instance of the class ``iteration``            |
+|     known by its name                                         |
+|                                                               |
+|     - ``iter_name``: the name of the iteration                |
++---------------------------------------------------------------+
+| .. module:: GetAllIterationsName                              |
+|                                                               |
+| **GetAllIterationsName()**                                    |
+|     Returns the liste of the name of all the existing         |
+|     iterations                                                |
+|                                                               |
++---------------------------------------------------------------+
+
+Methods of both classes cas and iteration
+****************************************"
+See also in :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: NextIteration                                     |
+|                                                               |
+| **NextIteration(iter_name)**                                  |
+|     Returns an instance of the class ``iteration`` after      |
+|     its creation. It is the next iteration after:             |
+|                                                               |
+|     - for a case: the very first one that corresponds to the  |
+|       first mesh of the case                                  |
+|     - for an iteration: the current iteration                 |
+|                                                               |
+| Default:  the produced mesh has got the same name as the      |
+| iteration                                                     |
+|                                                               |
+|     - ``iter_name``: the name of this next iteration          |
++---------------------------------------------------------------+
+| .. module:: LastIteration                                     |
+|                                                               |
+| **LastIteration()**                                           |
+|     Returns an instance of the class ``iteration`` that is    |
+|     the last iteration into the descendants of:               |
+|                                                               |
+|     - for a case: the very first one that corresponds to the  |
+|       first mesh of the case                                  |
+|     - for an iteration: the current iteration                 |
+|                                                               |
+|     It is the one that has got no child. There is an error if |
+|     more than one branch exists into the descendants.         |
+|                                                               |
++---------------------------------------------------------------+
+
+Methods of the class iteration
+******************************
+
+General methods
+===============
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: Compute                                           |
+|                                                               |
+| **Compute(option1, option2)**                                 |
+|     Computes the mesh produced by the iteration               |
+|                                                               |
+|     - ``option1``: an integer to decide what to do with       |
+|       existing files, if any                                  |
+|                                                               |
+|         * 0: stop with error                                  |
+|         * 1: the old files are removed                        |
+|                                                               |
+|     - ``option2``: an integer to decide what to do with       |
+|       the results                                             |
+|                                                               |
+|         * 1: no specific action                               |
+|         * 2: publication into the module SMESH                |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: successful adaptation                            |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the iteration                         |
++---------------------------------------------------------------+
+| .. module:: GetNumber                                         |
+|                                                               |
+| **GetNumber()**                                               |
+|     Returns the number of the iteration.                      |
+|                                                               |
+|     The iteration #0 is the one associated to the initial     |
+|     mesh. Then, an iteration with number #N comes from the    |
+|     adaptation of an iteration with number #(N-1).            |
++---------------------------------------------------------------+
+| .. module:: GetIterParent                                     |
+|                                                               |
+| **GetIterParent()**                                           |
+|     Returns the iteration parent                              |
++---------------------------------------------------------------+
+| .. module:: AssociateHypo                                     |
+|                                                               |
+| **AssociateHypo(hypo_name)**                                  |
+|     Associate an hypothesis with the iteration                |
+|                                                               |
+|     - ``hypo_name``: the name of the hypothesis               |
++---------------------------------------------------------------+
+| .. module:: GetHypoName                                       |
+|                                                               |
+| **GetHypoName()**                                             |
+|     Returns the name of the associated hypothesis             |
++---------------------------------------------------------------+
+| .. module:: GetCaseName                                       |
+|                                                               |
+| **GetCaseName()**                                             |
+|     Returns the name of the associated case                   |
++---------------------------------------------------------------+
+| .. module:: GetState                                          |
+|                                                               |
+| **GetState()**                                                |
+|     Returns the state of the iteration                        |
+|                                                               |
+|     - ``2``: computed iteration                               |
+|     - ``1``: non computed iteration                           |
+|     - ``<=0``: initial iteration not to be computed, with a   |
+|       number equal to the absolute valure of the state        |
++---------------------------------------------------------------+
+| .. module:: GetLogFile                                        |
+|                                                               |
+| **GetLogFile()**                                              |
+|     Returns the name of the file with the messages all along  |
+|     the running of HOMARD                                     |
++---------------------------------------------------------------+
+| .. module:: GetFileInfo                                       |
+|                                                               |
+| **GetFileInfo()**                                             |
+|     Returns the name of the file with the analysis of the mesh|
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Returns the name of the directory that contains the       |
+|     results of the iteration                                  |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Deletes the iteration and all its children                |
+|                                                               |
+|     - ``option``: an integer to define what to do with the    |
+|       MED file of the associated meshes                       |
+|                                                               |
+|         * 0: the files are kept                               |
+|         * 1: the files are removed                            |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+
+Information about the meshes
+============================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetMeshName                                       |
+|                                                               |
+| **SetMeshName(mesh_name)**                                    |
+|     Defines the name of the produced mesh                     |
+|                                                               |
+|     - ``mesh_name``: the name of the produced mesh            |
++---------------------------------------------------------------+
+| .. module:: GetMeshName                                       |
+|                                                               |
+| **GetMeshName()**                                             |
+|     Returns the name of the produced mesh                     |
++---------------------------------------------------------------+
+| .. module:: SetMeshFile                                       |
+|                                                               |
+| **SetMeshFile(mesh_file)**                                    |
+|     Defines the name of the MED file of the produced mesh     |
+|                                                               |
+|     - ``mesh_file``: the name of the MED file of the          |
+|       produced mesh                                           |
++---------------------------------------------------------------+
+| .. module:: GetMeshFile                                       |
+|                                                               |
+| **GetMeshFile()**                                             |
+|     Returns the name of the MED file of the produced mesh     |
++---------------------------------------------------------------+
+| .. module:: MeshInfo                                          |
+|                                                               |
+| **MeshInfo(Qual, Diam, Conn, Tail, Inte)**                    |
+|     Gives information about the current mesh. For every       |
+|     option, the choice #0 corresponds to 'no action', while   |
+|     the choice #1 launches the option.                        |
+|                                                               |
+|     - ``Qual``: quality of the elements                       |
+|     - ``Diam``: diametre of the elements                      |
+|     - ``Conn``: connexity of the domain; a single block, how  |
+|       many holes, etc.                                        |
+|     - ``Tail``: size of the parts of the domain, group by     |
+|       group                                                   |
+|     - ``Inte``: staggered elements, by dimension              |
++---------------------------------------------------------------+
+
+Information about the field
+===========================
+
+The file of the fields
+----------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetFieldFile                                      |
+|                                                               |
+| **SetFieldFile(field_file)**                                  |
+|     Defines the MED file of the fields                        |
+|                                                               |
+|     - ``field_file``: the name of the MED file of the fields: |
+|       the driving field for the adaptation, or the fields to  |
+|       be interpolated                                         |
++---------------------------------------------------------------+
+| .. module:: GetFieldFileName                                  |
+|                                                               |
+| **GetFieldFileName()**                                        |
+|     Returns the name of the MED file of the fields            |
++---------------------------------------------------------------+
+
+The time step for the driving field
+-----------------------------------
+
+If no time step is defined for the field or if a single time step is defined for the field, the definition of a time step is useless. That will be the default choice.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetTimeStep                                       |
+|                                                               |
+| **SetTimeStep(TimeStep)**                                     |
+|     Defines the time step for the driving field for the       |
+|     adaptation. The rank will be ignored.                     |
+|                                                               |
+|     - ``TimeStep``: the selected time step                    |
++---------------------------------------------------------------+
+| .. module:: SetTimeStepRank                                   |
+|                                                               |
+| **SetTimeStepRank(TimeStep, Rank)**                           |
+|     Defines the time step and the rank for the driving field  |
+|     for the adaptation                                        |
+|                                                               |
+|     - ``TimeStep``: the selected time step                    |
+|     - ``Rank``: the selected rank                             |
++---------------------------------------------------------------+
+| .. module:: SetTimeStepRankLast                               |
+|                                                               |
+| **SetTimeStepRankLast()**                                     |
+|     The last time step will be used for the driving field for |
+|     the adaptation, whatever its value                        |
++---------------------------------------------------------------+
+| .. module:: GetTimeStep                                       |
+|                                                               |
+| **GetTimeStep()**                                             |
+|     Returns the selected time step for the driving field      |
++---------------------------------------------------------------+
+| .. module:: GetRank                                           |
+|                                                               |
+| **GetRank()**                                                 |
+|     Returns the selected rank for the driving field           |
++---------------------------------------------------------------+
+
+The time steps for the fields to interpolate
+--------------------------------------------
+
+The choice of the fields to interpolated are defined in the hypothesis (see :doc:`tui_create_hypothese`).
+For a given field, if nothing is declared, every single time step will be considered.
+If some time steps are wanted, they must be defined as follows.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetFieldInterpTimeStep                            |
+|                                                               |
+| **SetFieldInterpTimeStep(FieldName, TimeStep)**               |
+|     Defines the time step for the interpolation of the field. |
+|     The rank will be ignored.                                 |
+|                                                               |
+|     - ``FieldName``: the name of the field to interpolate     |
+|     - ``TimeStep``: the selected time step                    |
++---------------------------------------------------------------+
+| .. module:: SetFieldInterpTimeStepRank                        |
+|                                                               |
+| **SetFieldInterpTimeStepRank(FieldName, TimeStep)**           |
+|     Defines the time step and the rank for the interpolation  |
+|     of the field.                                             |
+|                                                               |
+|     - ``FieldName``: the name of the field to interpolate     |
+|     - ``TimeStep``: the selected time step                    |
+|     - ``Rank``: the selected rank                             |
++---------------------------------------------------------------+
+| .. module:: GetFieldInterpsTimeStepRank                       |
+|                                                               |
+| **GetFieldInterpsTimeStepRank()**                             |
+|     Returns the information (name of the field, time step,    |
+|     rank)                                                     |
+|                                                               |
+|     Warning: the time step and the rank are stored as strings |
+|     in the list and not as integers.                          |
+|                                                               |
+|     Example: ['DEPL', '1', '1', 'DEPL', '2', '1', 'Mass',     |
+|     '2', '0', 'Mass', '3', '0']                               |
++---------------------------------------------------------------+
+
+Miscellenaous
+=============
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetInfoCompute                                    |
+|                                                               |
+| **SetInfoCompute(MessInfo)**                                  |
+|     Defines options to track the computation of the iteration |
+|                                                               |
+|     - ``MessInfo``: integer that drives prints, as a multiple |
+|       of 2, 3 and 5                                           |
+|                                                               |
+|         * 1 : nothing (default)                               |
+|         * 2x : computational time                             |
+|         * 3x : MED files                                      |
+|         * 5x : memory                                         |
++---------------------------------------------------------------+
+| .. module:: GetInfoCompute                                    |
+|                                                               |
+| **GetInfoCompute()**                                          |
+|     Returns the options to track the computation              |
++---------------------------------------------------------------+
+
+
+Example
+*******
+.. index:: single: mesh;initial
+
+To create the first iteration, the starting point is the iteration associated to the initial mesh. It is the one that defines the case.
+::
+
+    iter_name = "Iteration_1"
+    iter_1 = case_1.NextIteration(iter_name)
+    iter_1.SetField(field_file)
+    iter_1.SetTimeStepRank( 0, 0)
+    iter_1.SetMeshName("maill_01")
+    iter_1.SetMeshFile("/local00/M.01.med")
+    iter_1.AssociateHypo("HypoField")
+    codret = iter_1.Compute(1, 2)
+
+Then, the next iteration is created from the current iteration.
+::
+
+    iter_name = "Iteration_2"
+    iter_2 = iter_1.NextIteration(iter_name)
+    iter_2.SetField(field_file)
+    iter_2.SetTimeStepRank( 1, 1)
+    iter_2.SetMeshName("maill_02")
+    iter_2.SetMeshFile("/local00/M.02.med")
+    iter_2.AssociateHypo("HypoField")
+    codret = iter_2.Compute(1, 2)
+
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_iteration`
diff --git a/doc/en/tui_create_yacs.rst b/doc/en/tui_create_yacs.rst
new file mode 100644 (file)
index 0000000..75b28d4
--- /dev/null
@@ -0,0 +1,275 @@
+.. _tui_create_yacs:
+
+The schema YACS
+###############
+
+.. index:: single: YACS
+
+The variables are described in :doc:`gui_create_yacs`.
+
+Méthodes de la classe cas
+*************************
+See also in :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateYACSSchema                                  |
+|                                                               |
+| **CreateYACSSchema(yacs_name, ScriptFile, DirName, MeshFile)**|
+|     Returns an instance of the class ``yacs``, after its      |
+|     creation                                                  |
+|                                                               |
+|     - ``yacs_name`` : the name of the schema                  |
+|     - ``ScriptFile`` : the file of the python script that     |
+|       drives the computation, coupled with the mesh adaptation|
+|     - ``DirName`` : the directory for the computation         |
+|     - ``MeshFile`` : the MED file that contains the very first|
+|       mesh for the computation                                |
++---------------------------------------------------------------+
+
+Methodes of the class homard
+****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetYACS                                           |
+|                                                               |
+| **GetYACS(yacs_name)**                                        |
+|     Returns the instance of the class classe ``yacs``         |
+|     known by its name                                         |
+|                                                               |
+|     - ``yacs_name`` : the name of the schema                  |
++---------------------------------------------------------------+
+| .. module:: GetAllYACSsName                                   |
+|                                                               |
+| **GetAllYACSsName()**                                         |
+|     Returns the list of the names of all the existing         |
+|     schemas                                                   |
++---------------------------------------------------------------+
+
+
+
+Methodes of the class YACS
+**************************
+
+General methods
+===============
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: Write                                             |
+|                                                               |
+| **Write()**                                                   |
+|     Writes the schema into the file ``schema.xml``, in the    |
+|     directory of the case                                     |
+|     Writes the schema into the file of the schema             |
+|     By default, it is the file ``schema.xml``, in the         |
+|     directory of the case. If ``WriteOnFile`` was used before |
+|     the writings are into this new file.                      |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the writing is done                              |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+| .. module:: WriteOnFile                                       |
+|                                                               |
+| **WriteOnFile(file_xml)**                                     |
+|     Writes the schema into a specified file.                  |
+|                                                               |
+|     - ``file_xml`` : name of the xml file for the schema      |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the writing is done                              |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Deletes the schema                                        |
+|                                                               |
+|     - ``option``: an integer to define what to do with the    |
+|       xml file of the schema                                  |
+|                                                               |
+|         * 0: the files is kept                                |
+|         * 1: the files is removed                             |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+
+
+Informations about the schema
+=============================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the schema                            |
++---------------------------------------------------------------+
+| .. module:: SetType                                           |
+|                                                               |
+| **SetType(Type)**                                             |
+|     Defines the type of the schema.                           |
+|                                                               |
+|     - ``Type`` : the type of the schema                       |
+|                                                               |
+|         * 1 : constant                                        |
+|         * 2 : variable                                        |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Returns the type of the schema                            |
++---------------------------------------------------------------+
+| .. module:: SetScriptFile                                     |
+|                                                               |
+| **SetScriptFile(script_file)**                                |
+|     Defines the file of the script python that launches the   |
+|     computation                                               |
+|                                                               |
+|     - ``script_file`` : the name of the file that contains    |
+|       the script python                                       |
++---------------------------------------------------------------+
+| .. module:: GetScriptFile                                     |
+|                                                               |
+| **GetScriptFile()**                                           |
+|     Returns the name of the file that contains the script     |
+|     python                                                    |
++---------------------------------------------------------------+
+| .. module:: SetDirName                                        |
+|                                                               |
+| **SetDirName(dir_name)**                                      |
+|     Defines the name of the directory for the computation     |
+|                                                               |
+|     - ``dir_name`` : the name of the directory for the        |
+|       computation                                             |
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Returns the name of the directory for the computation     |
++---------------------------------------------------------------+
+| .. module:: SetMeshFile                                       |
+|                                                               |
+| **SetMeshFile(mesh_file)**                                    |
+|     Defines the MED file of the very first mesh               |
+|                                                               |
+|     - ``mesh_file`` : the name of the MED file that contains  |
+|       the very first mesh for the computation                 |
++---------------------------------------------------------------+
+| .. module:: GetMeshFile                                       |
+|                                                               |
+| **GetMeshFile()**                                             |
+|     Returns the name of the MED file of the very first mesh   |
+|     for the computation                                       |
++---------------------------------------------------------------+
+| .. module:: SetXMLFile                                        |
+|                                                               |
+| **SetXMLFile(xml_file)**                                      |
+|     Defines the xml file                                      |
+|                                                               |
+|     - ``mesh_file`` : the name of the xml file                |
++---------------------------------------------------------------+
+| .. module:: GetXMLFile                                        |
+|                                                               |
+| **GetXMLFile()**                                              |
+|     Returns the name of the xml file                          |
++---------------------------------------------------------------+
+
+
+The options of the schema
+=========================
+The default values are defined by the preferences of the module HOMARD.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetMaxIter                                        |
+|                                                               |
+| **SetMaxIter(MaxIter)**                                       |
+|     Defines the maximal number of iterations for the schema.  |
+|                                                               |
+|     - ``MaxIter`` : the maximal number of iterations of the   |
+|       schema                                                  |
++---------------------------------------------------------------+
+| .. module:: GetMaxIter                                        |
+|                                                               |
+| **GetMaxIter()**                                              |
+|     Returns the maximal number of iterations of the schema    |
++---------------------------------------------------------------+
+| .. module:: SetMaxNode                                        |
+|                                                               |
+| **SetMaxNode(MaxNode)**                                       |
+|     Defines the maximal number of nodes for the adaptation.   |
+|                                                               |
+|     - ``MaxNode`` : the maximal number of nodes for the       |
+|       adaptation. If MaxNode equals 0, no limit.              |
++---------------------------------------------------------------+
+| .. module:: GetMaxNode                                        |
+|                                                               |
+| **GetMaxNode()**                                              |
+|     Returns the maximal number of nodes for the adaptation    |
++---------------------------------------------------------------+
+| .. module:: SetMaxElem                                        |
+|                                                               |
+| **SetMaxElem(MaxElem)**                                       |
+|     Defines the maximal number of meshes for the adaptation.  |
+|                                                               |
+|     - ``MaxElem`` : the maximal number of meshes for the      |
+|       adaptation. If MaxElem equals 0, no limit.              |
++---------------------------------------------------------------+
+| .. module:: GetMaxElem                                        |
+|                                                               |
+| **GetMaxElem()**                                              |
+|     Returns the maximal number of meshes for the adaptation   |
++---------------------------------------------------------------+
+| .. module:: SetTestConvergence                                |
+|                                                               |
+| **SetTestConvergence(Type, VRef)**                            |
+|     Defines a convergence test for the schema.                |
+|                                                               |
+|     - ``Type`` : the type of convergence of the schema.       |
+|                                                               |
+|         * 0 : no test                                         |
+|         * 1 : if the test value is greater than VRef          |
+|         * 2 : if the test value is lower than VRef            |
+|                                                               |
+|     - ``VRef`` : the reference value for the test             |
++---------------------------------------------------------------+
+| .. module:: GetTestConvergenceType                            |
+|                                                               |
+| **GetTestConvergenceType()**                                  |
+|     Returns the type of convergence of the schema.            |
++---------------------------------------------------------------+
+| .. module:: GetTestConvergenceVRef                            |
+|                                                               |
+| **GetTestConvergenceVRef()**                                  |
+|     Returns the reference value for the test.                 |
++---------------------------------------------------------------+
+
+
+Example
+*******
+The creation of a schema is done as follows:
+::
+
+    ScriptFile = "/scratch/D68518/Salome/HOMARD_SALOME/HOMARD_SRC/doc/files/ScriptAster.py"
+    DirName = "/scratch/D68518/computation"
+    MeshFile = "/scratch/D68518/computation/maill.00.med"
+    YACS_0 = Case.CreateYACSSchema("YACS_0", ScriptFile, DirName, MeshFile)
+    YACS_0.SetMaxIter(4)
+
+It can be writen down in a file :
+::
+
+    YACSFile = "/scratch/D68518/computation/yacs.xml"
+    codret = YACS_0.WriteOnFile(YACSFile)
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_yacs`
+
+
+
diff --git a/doc/en/tui_create_zone.rst b/doc/en/tui_create_zone.rst
new file mode 100644 (file)
index 0000000..2a17986
--- /dev/null
@@ -0,0 +1,204 @@
+.. _tui_create_zone:
+
+The zone
+########
+
+.. index:: single: zone
+.. index:: single: box
+.. index:: single: sphere
+.. index:: single: cylinder
+.. index:: single: pipe
+.. index:: single: disk
+.. index:: single: disk with a hole
+.. index:: single: 2D
+
+The variables are described in :doc:`gui_create_zone`.
+
+Methods of the class homard
+***************************
+
+These methods returns an instance of the class zone.
+
++----------------------------------------------------------------------------------+
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneBox                                                        |
+|                                                                                  |
+| **CreateZoneBox(zone_name, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax)**                 |
+|     Returns an instance of the class ``zone`` of type box                        |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a box                         |
+|     - ``Xmin``, ``Xmax``: min/max coordinates extrêmes along X                   |
+|     - ``Ymin``, ``Ymax``: min/max coordinates extrêmes along Y                   |
+|     - ``Zmin``, ``Zmax``: min/max coordinates extrêmes along Z                   |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneCylinder                                                   |
+|                                                                                  |
+| **CreateZoneCylinder(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H)**   |
+|     Returns an instance of the class ``zone`` of type cylinder                   |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a cylinder                    |
+|     - ``Xbase``, ``Ybase``, ``Zbase``: coordinates of a point on the axis        |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe``: vector of the axis                           |
+|     - ``R``: radius of the cylinder                                              |
+|     - ``H``: height of the cylinder                                              |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZonePipe                                                       |
+|                                                                                  |
+| **CreateZonePipe(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H, Rint)** |
+|     Returns an instance of the class ``zone`` of type pipe                       |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a pipe                        |
+|     - ``Xbase``, ``Ybase``, ``Zbase``: coordinates of a point on the axis        |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe``: vector of the axis                           |
+|     - ``R``: external radius of the pipe                                         |
+|     - ``H``: height of the pipe                                                  |
+|     - ``R``: internal radius of the pipe                                         |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneSphere                                                     |
+|                                                                                  |
+| **CreateZoneSphere(zone_name, Xcen, Ycen, Zcen, R)**                             |
+|     Returns an instance of the class ``zone`` of type sphere                     |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a sphere                      |
+|     - ``Xcen``, ``Ycen``, ``Zcen``: coordinates of the center of the sphere      |
+|     - ``R``: radius of the sphere                                                |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneBox2D                                                      |
+|                                                                                  |
+| **CreateZoneBox2D(zone_name, Umin, Umax, Vmin, Vmax, Orient)**                   |
+|     Returns an instance of the class ``zone`` of type rectangle                  |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a rectangle                   |
+|     - ``Umin``, ``Umax``: min/max coordinates for the 1st dimension              |
+|     - ``Vmin``, ``Vmax``: min/max coordinates for the 2nd dimension              |
+|     - ``Orient``: integer that defines the convention for the plane              |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneDisk                                                       |
+|                                                                                  |
+| **CreateZoneDisk(zone_name, Ucen, Vcen, R, Orient)**                             |
+|     Returns an instance of the class ``zone`` of type disk                       |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a full disk                   |
+|     - ``Ucen``, ``Vcen``: coordinates of the center of the disk                  |
+|     - ``R``: radius of the disk                                                  |
+|     - ``Orient``: integer that defines the convention for the plane              |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneDiskWithHole                                               |
+|                                                                                  |
+| **CreateZoneDiskWithHole(zone_name, Ucen, Vcen, R, Rint, Orient)**               |
+|     Returns an instance of the class ``zone`` of type disk with a hole           |
+|     after its creation                                                           |
+|                                                                                  |
+|     - ``zone_name``: the name of the zone based on a disk with a hole            |
+|     - ``Ucen``, ``Vcen``: coordinates of the center of the disk                  |
+|     - ``R``: external radius of the disk                                         |
+|     - ``Rint``: internal radius of the disk                                      |
+|     - ``Orient``: integer that defines the convention for the plane              |
++----------------------------------------------------------------------------------+
+
+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+|   The convention of the orientation of the plane is the same  |
+|   as the one that is applied in the other modules of SALOME,  |
+|   in particular GEOM:                                         |
+|                                                               |
+|     1. plane XY ; U <==> X and V <==> Y                       |
+|     2. plane YZ ; U <==> Y and V <==> Z                       |
+|     3. plane ZX ; U <==> Z and V <==> X                       |
++---------------------------------------------------------------+
+
+
+.. note::
+  The functions that define 2D zones should be used only of the whole mesh is 2D into a plane of coordinates.
+
+
+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetZone                                           |
+|                                                               |
+| **GetZone(zone_name)**                                        |
+|     Returns an instance of the class ``zone``                 |
+|     known by its name                                         |
+|                                                               |
+|     - ``zone_name``: the name of the zone                     |
++---------------------------------------------------------------+
+| .. module:: GetAllZonesName                                   |
+|                                                               |
+| **GetAllZonesName()**                                         |
+|     Returns the liste of the name of all the existing zones   |
+|                                                               |
++---------------------------------------------------------------+
+
+
+Methods of the class zone
+*************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Returns the name of the zone                              |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Returns the type of the zone                              |
+|                                                               |
+|         * 2: box                                              |
+|         * 3: sphere                                           |
+|         * 5: cylinder                                         |
+|         * 7: pipe                                             |
+|         * 11, 12, 13: rectangle and orientation 1, 2 ou 3     |
+|         * 31, 32, 33: disk and orientation 1, 2 ou 3          |
+|         * 61, 62, 63: disk with a hole and orientation 1, 2   |
+|           ou 3                                                |
++---------------------------------------------------------------+
+| .. module:: GetCoords                                         |
+|                                                               |
+| **GetCoords()**                                               |
+|     Returns the array of the coordinates of the zone          |
+|     with the same order as in its definition with             |
+|     CreateZoneXXXX                                            |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Deletes the zone                                          |
+|                                                               |
+|     Returns an integer:                                       |
+|         * 0: the destruction is done                          |
+|         * other value: problem                                |
++---------------------------------------------------------------+
+
+
+Example
+*******
+The creation of a 3D box is done as follows:
+::
+
+    zone_1 = homard.CreateZoneBox ("BLOC", -1., 1., -30., 40., 10.5, 20.8)
+
+
+The creation of a disk in the plane XY is done as follows:
+::
+
+    zone_2 = homard.CreateZoneDisk ("disk", 1., 3., 43.25, 1)
+
+
+Similar graphical input
+***********************
+Look at :doc:`gui_create_zone`
+
+.. warning::
+  With the graphical input mode, if a zone is edited and if one of the dimensions is modified, all the iterations that were computed with this zone are unvalidated. In python mode, that is not true: the iterations stay as they are.
diff --git a/doc/en/tui_homard.rst b/doc/en/tui_homard.rst
new file mode 100644 (file)
index 0000000..2665750
--- /dev/null
@@ -0,0 +1,35 @@
+.. _tui_homard:
+
+The computation
+###############
+
+Methods of the class homard
+***************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetLanguageShort                                  |
+|                                                               |
+| **SetLanguageShort(lang)**                                    |
+|     Gives the language of the messages. If the choice is      |
+|     uncorrect, english is choosen.                            |
+|                                                               |
+|     - ``lang`` : the language of the messages.                |
+|                                                               |
+|         * 'fr' : francais                                     |
+|         * 'en' : anglais                                      |
++---------------------------------------------------------------+
+| .. module:: GetLanguageShort                                  |
+|                                                               |
+| **GetLanguageShort()**                                        |
+|     Returns the language of the messages.                     |
++---------------------------------------------------------------+
+
+
+Example
+*******
+
+
+Corresponding graphical interface
+*********************************
+Look at :doc:`gui_homard`
diff --git a/doc/en/tui_usage.rst b/doc/en/tui_usage.rst
new file mode 100644 (file)
index 0000000..2b8b196
--- /dev/null
@@ -0,0 +1,28 @@
+User's guide of the TUI
+#######################
+
+User's guide
+************
+
+The functionnalities of the module HOMARD are available by python instructions. We shall find here the description of each of the functions.
+
+.. toctree::
+   :maxdepth: 2
+
+   tui_create_case
+   tui_create_iteration
+   tui_create_hypothese
+   tui_create_zone
+   tui_create_boundary
+   tui_homard
+   tui_create_yacs
+
+Preferences
+***********
+
+Some default options for the module HOMARD are defined into the preferences.
+
+.. toctree::
+   :maxdepth: 2
+
+   preferences
diff --git a/doc/en/tutorials.rst b/doc/en/tutorials.rst
new file mode 100644 (file)
index 0000000..b054484
--- /dev/null
@@ -0,0 +1,128 @@
+Examples
+########
+.. index:: single: example
+.. index:: single: python
+
+One will find here the instructions python for some characteristic configurations. The associated data files are downloadable. It is necessary to think of adapting the value of the variable ``data_dir``: it is the directory in which the files med will have been recorded.
+It is in the directory ``dircase`` that the files will be written resulting from the successive adaptations. This directory is created by default in ``/tmp``.
+
+Loading of the module HOMARD
+****************************
+.. index:: single: YACS
+
+The loading of the module HOMARD is done in a way similar to the other modules.
+
+ ::
+
+  import HOMARD
+  homard = salome.lcc.FindOrLoadComponent('FactoryServer','HOMARD')
+  homard.SetCurrentStudy(salome.myStudy)
+
+To use the module HOMARD within a distributed scheme YACS, the loading is made as follows:
+
+ ::
+
+  import HOMARD
+  my_container.load_component_Library('HOMARD')
+  homard = my_container.create_component_instance('HOMARD',0)
+  homard.SetCurrentStudy(salome.myStudy)
+
+Uniform refinement
+******************
+.. index:: single: refinement;uniform
+
+One will make here three successive uniform refinements of the mesh contained in the file ``tutorial_1.00.med``. Some notes:
+  * the same hypothesis is used with each iteration
+  * the produced mesh always bears the same name. That does not pose a problem because it is stored in different files.
+
+
+.. literalinclude:: ../files/tutorial_1.py
+   :lines: 52-85
+
+.. note::
+  Download the files
+
+  * :download:`initial mesh<../files/tutorial_1.00.med.gz>`
+  * :download:`python script<../files/tutorial_1.py>`
+  * :download:`python script for the compression<../files/tutorial_util.py>`
+
+
+
+Refinement by zones
+*******************
+.. index:: single: zone
+
+One proceeds here to refinement according to zones. To pass from the initial mesh to the mesh 'M_1', one uses a box framing the z=1 plane and a sphere centered on the origin with radius 1.05. Then to pass from the mesh 'M_1' to the mesh 'M_2', one replaces the sphere by a box framing the cube on side 0.5, pointing on the origin and the meshes in the very first zone are unrefined.
+
+.. literalinclude:: ../files/tutorial_2.py
+   :lines: 52-95
+
+.. note::
+  Download the files
+
+  * :download:`initial mesh<../files/tutorial_2.00.med.gz>`
+  * :download:`python script<../files/tutorial_2.py>`
+  * :download:`python script for the compression<../files/tutorial_util.py>`
+
+
+Refinement driven by a field
+****************************
+.. index:: single: field
+
+One proceeds here to refinement according to a field. The hypotheses are used to define the name of the field and the thresholds of refinement/unrefinement. The input of the file and the instants is made in the iteration. Fields on the nodes or the elements are interpolated.
+To adapt the H_1 mesh resulting from the Iter_1 iteration, two alternatives are applied. In the first, Iter_2, the field is a scalar field of indicators of error and one cuts out the 1.5% of elements where the error is largest. In the second alternative, Iter_2_bis, one is based on a vector field and one examines the jump of this vector between an element and its neighbors: one will cut out where the infinite standard of this jump is higher than the absolute threshold of 0.0001.
+
+.. literalinclude:: ../files/tutorial_3.py
+   :lines: 52-124
+
+.. note::
+  Download the files
+
+  * :download:`mesh and field stage 0<../files/tutorial_3.00.med.gz>`
+  * :download:`mesh and field stage 1<../files/tutorial_3.01.med.gz>`
+  * :download:`python script<../files/tutorial_3.py>`
+  * :download:`python script for the compression<../files/tutorial_util.py>`
+
+
+Non plane boundaries
+********************
+.. index:: single: field
+.. index:: single: YACS
+
+One tests the follow-up of the curved borders here: analytical borders to describe various surfaces of the pipes and a discrete border to describe the intersecting lines of the two pipes. The driving of refinement is the following: uniform refinement of all the elements contained in indicated groups. One starts by refining the inner faces with the pipes; then, one refines continuation twice the external faces with the pipes.
+Scheme YACS carrying out this adaptation is downloadable.
+
+.. literalinclude:: ../files/tutorial_4.py
+   :lines: 52-111
+
+.. note::
+  Download the files
+
+  * :download:`initial mesh<../files/tutorial_4.00.med.gz>`
+  * :download:`mesh of the discrete boundary<../files/tutorial_4.fr.med.gz>`
+  * :download:`python script<../files/tutorial_4.py>`
+  * :download:`python script for the compression<../files/tutorial_util.py>`
+  * :download:`YACS scheme<../files/tutorial_4.xml>`
+
+
+Specific instructions for a 2D mesh
+***********************************
+.. index:: single: 2D
+
+The instructions to adapt a 2D mesh are exactly identical to those necessary to the adaptation of a 3D mesh. The only exception relates to refinement according to geometrical zones: different functions are used to be able to define 2D zones. One gives the 2D coordinates zones, by specifying the orientation of the plane of the mesh.
+In the case presented here, one for the first time refines all the elements contained in a bored disk, then in one second iteration, all the elements contained in a rectangle. One will note the use of the follow-up of the circular borders of the field.
+
+.. literalinclude:: ../files/tutorial_5.py
+   :lines: 52-95
+
+.. note::
+  Download the files
+
+  * :download:`initial mesh<../files/tutorial_5.00.med.gz>`
+  * :download:`mesh of the discrete boundary<../files/tutorial_5.fr.med.gz>`
+  * :download:`python script<../files/tutorial_5.py>`
+  * :download:`python script for the compression<../files/tutorial_util.py>`
+
+
+.. toctree::
+   :maxdepth: 2
diff --git a/doc/en/yacs.rst b/doc/en/yacs.rst
new file mode 100644 (file)
index 0000000..4815352
--- /dev/null
@@ -0,0 +1,302 @@
+.. _yacs:
+
+YACS
+####
+.. index:: single: YACS
+
+Using a YACS scheme allows the coupling between a computation and an adaptation as described into :doc:`intro`. This coupling can be repeated inside a loop as long as a criteria for the convergence is reached for instance. Many ways are available to program a YACS scheme. The solution that is shown here is correct but many others are too!
+
+In this part, an extensive description of a schema YACS is available.
+
+.. note::
+  The module HOMARD proposes an automatic creation of a schema YASC starting from a defined case. To do that, see :doc:`gui_create_yacs`
+
+Introduction
+************
+
+Here is the description of a scheme for a computation in which a value is to be stabilized. The computation starts over an initial mesh, then HOMARD makes an adaptation. A new computation is done over this new mesh and its result is analyzed. Depending on this analysis, the coupling goes on or does not. The general look of the scheme is this one:
+
+.. image:: ../images/yacs_01.png
+   :align: center
+   :alt: yacs - allure générale
+   :width: 512
+   :height: 306
+
+.. note::
+  Among all the treated data, certain are unchanging: the name of the directory of calculation, the name of the case, the name of the hypothesis of adaptation, etc. It was chosen to impose them 'hard' in the various parameters of service or within the scripts python. We could also define them a priori in a node PresetNode and then pass on them by links. We did not hold this solution because it increases strongly the number of parameters and links attached to every node. It is very penalizing for the legibility of the scheme. The only data which are going to circulate are the ones been imperative by the description of the service and those that evolve during the execution of the scheme.
+
+The boxes
+*********
+
+The main boxes are:
+
+- DataInit : initialisation of the initial mesh
+- Etude_Initialisation : launching of the module HOMARD inside SALOME
+- Boucle_de_convergence : gestion of the loop computation/adaptation
+- Bilan : final information
+
+DataInit
+========
+.. image:: ../images/yacs_a_01.png
+   :align: center
+   :alt: DataInit
+   :width: 158
+   :height: 61
+
+This box is type PresetNode's elementary node. Its only function is to initialize the variable MeshFile that contains the name of the file of the initial mesh.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 38-42
+
+Etude_Initialisation
+====================
+The box Etude_Initialisation launches the component HOMARD inside SALOME. It is a block consisted of two parts, that are invariable whatever is the envisaged application:
+
+- StudyCreation : python node
+- SetCurrentStudy : service of the component HOMARD
+
+.. image:: ../images/yacs_b_01.png
+   :align: center
+   :alt: Etude_Initialisation
+   :width: 323
+   :height: 97
+
+The python node StudyCreation initialize the SALOME study that is given through the output:
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 44-62
+
+The service SetCurrentStudy connects this study to an instance of HOMARD.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 63-68
+
+
+Boucle_de_convergence
+=====================
+The box Boucle_de_convergence is type WhileLoop. The condition is initialized in 1: the internal block Alternance_Calcul_HOMARD is executed. Within this block, we calculate and we adapt the mesh; when the process has to stop either as a result of error, or by convergence, the condition passes in 0. The loop ends and we pass in the following box, Bilan.
+
+.. image:: ../images/yacs_c_01.png
+   :align: center
+   :alt: Boucle
+   :width: 163
+   :height: 93
+
+Bilan
+=====
+.. image:: ../images/yacs_d_01.png
+   :align: center
+   :alt: Bilan
+   :width: 158
+   :height: 63
+
+This box is a node python that takes in input a character string, MessInfo. If everything passed well, this message is empty. A window QT appears to confirm the convergence. If there was a problem, the message contains messages emitted during the calculations. The window QT shows this message.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 406-419
+
+
+Loop for the calculations
+*************************
+.. image:: ../images/yacs_c_02.png
+   :align: center
+   :alt: Boucle
+   :width: 338
+   :height: 152
+
+This box is a block that manages the computation, the adaptation and the analysis.
+
+Calcul
+======
+.. image:: ../images/yacs_c_03.png
+   :align: center
+   :alt: Calcul
+   :width: 155
+   :height: 87
+
+This box is a node python that is going to drive the calculation. In input, we find the number of the calculation (0 at first) and the name of the file which contains the mesh on which to calculate. In output, we find an integer which represents the error on this calculation (0 so everything goes well) and a dictionary python gathering the results of the calculation. The body of the node is established by the launch of a script python that activates the calculation.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 77-103
+
+In this example, we must define:
+
+- rep_calc : the directory in which will be executed the calculation.
+- rep_script : the directory in which is the python that will launch the calculation. This directory is to be added to the PATH. From this directory, we shall import Script from the file ScriptAster.py
+
+The python Script is programmed as the user wishes it so that the calculation can be made on the current mesh. According to the mode of launch of the code of calculation, we can need other information, as the number of the calculation or the directory of the calculation for example. The freedom is total. In our case, the arguments of input are the name of the file of mesh, the number of the calculation and the directory of calculation. They are given in a list python: ["--rep_calc=rep_calc", "--num=numCalc", "--mesh_file=MeshFile"]
+].
+
+On the other hand the output of the script has to obey the following rule. We get back a code of error, an error message and a dictionary. This dictionary contains necessarily the following keys:
+
+- "FileName" : the name of the file that contains the results of the calculation
+- "V_TEST" : the value the convergence of which we want to test
+
+Adaptation
+==========
+.. image:: ../images/yacs_c_04.png
+   :align: center
+   :alt: Adaptation
+   :width: 661
+   :height: 566
+
+The box Adaptation is a Switch node driven by the code of error of the previous calculation. If this code is nil, YACS will activate the box Adaptation_HOMARD that will launch the adaptation. If the code is not nil, we pass directly in the box Arret_boucle.
+
+Adaptation_HOMARD
+-----------------
+The first task tries to execute concern the initialization of the data necessary for HOMARD in the box HOMARD_Initialisation. This box is a switch node driven by the number of the calculation. In the starting up, the number is nil and YACS activates the box Iter_1.
+
+Iter_1
+^^^^^^
+.. image:: ../images/yacs_c_06.png
+   :align: center
+   :alt: Iter_1
+   :width: 481
+   :height: 151
+
+This box begins by creating the case HOMARD by calling the CreateCase service.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 208-215
+
+The name of the case CaseName is imposed on "Calcul". The name of the case MeshName is imposed on "BOX". The parameters of input FileName arise from the output of the previous calculation. The parameter of output is an instance of case.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 443-446
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 483-486
+
+The options of this case must be now given. It is made by the node python CaseOptions. It is imperative to give the directory of calculation. We shall look at the description of the functions in :doc:`tui_create_case`. In output, we get back the instance of the iteration corresponding to the initial state of the case.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 216-228
+
+Finally, a hypothesis is created by calling the CreateHypothese service. The parameter of output is an instance of hypothese.
+
+Homard_Exec
+^^^^^^^^^^^
+Once initialized, the adaptation can be calculated. It is the goal of the Homard_Exec box, in the form of a script python.
+
+.. image:: ../images/yacs_c_09.png
+   :align: center
+   :alt: Homard_Exec
+   :width: 153
+   :height: 141
+
+The directory of calculation is recovered. The name of the mesh is given.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 245-250
+
+../..
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 325-333
+
+The hypothesis transmitted in input parameter characterized (look :doc:`tui_create_hypothese`) :
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 254-278
+
+It is necessary to establish a name for the future iteration. To make sure that the name was never used, one installs a mechanism of incremental naming starting from the name of the initial iteration. As this initial name is the name of the initial mesh, one obtains a succession of names in the form: M_001, M_002, M_003, etc
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 280-290
+
+The iteration is supplemented : hypothesis, future mesh, field (look :doc:`tui_create_iteration`) :
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 292-311
+
+The iteration is calculated. If it were correct, variable OK equals 1: one will be able to continue the execution of the scheme. If there were a problem, variable OK equals 0 to mean that calculation must stop; an error message then is given.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 313-324
+
+After this execution, the process leaves the Adaptation_HOMARD node, then Adaptation node. One arrives then at the node of analysis.
+
+Iter_n
+^^^^^^
+.. image:: ../images/yacs_c_07.png
+   :align: center
+   :alt: Iter_n
+   :width: 323
+   :height: 92
+
+For the following passing in the block of adaptation, it is necessary to recover:
+
+- the last created iteration: service LastIteration (look :doc:`tui_create_iteration`)
+- the created hypothesis: service GetHypothesis (look :doc:`tui_create_hypothese`)
+
+One passes then in the Homard_Exec node to calculate the new mesh.
+
+Arret_boucle
+------------
+.. image:: ../images/yacs_c_08.png
+   :align: center
+   :alt: Arret_boucle
+   :width: 163
+   :height: 152
+
+The Arret_boucle block is present to only make forward variables because the input parameters of the nodes must always be filled. It is a very simple python:
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 173-184
+
+Analyse
+=======
+.. image:: ../images/yacs_c_05.png
+   :align: center
+   :alt: Analyse
+   :width: 156
+   :height: 139
+
+The Analyse block is a script python which ensures the complete control of the process by examining the causes of possible error successively.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 104-116
+
+../..
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 162-170
+
+One starts by analyzing the return of the computer code:
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 118-123
+
+Checking of the presence of the name of the result file in the dictionary of the results:
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 125-132
+
+Checking of convergence. That supposes that the value to be tested is present in the dictionary under the key 'V_TEST'. Here, one set up a test on the variation of the value of one calculation at the other. With the first passage, nothing is tested. In the following passing, one tests if the relative variation is lower than 1 thousandths. One could have set up an absolute test if one had recovered a total level of error for example.
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 134-152
+
+Lastly, it is checked that a maximum nomber of adaptations is not exceeded:
+
+.. literalinclude:: ../files/yacs_01.en.xml
+   :lines: 154-159
+
+
+Use this scheme
+***************
+To reproduce this example, download:
+  * :download:`the scheme <../files/yacs_01.en.xml>`
+  * :download:`an example of python script <../files/yacs_script.py>`
+  * :download:`an example of python script ... for nothing <../files/yacs_script_test.py>`
+
+It should be adapted to simulation considered. In particular, it is necessary:
+
+- to adjust the names of the files and the directories
+- to provide a script of launching of calculation respecting the instructions evoked herebefore
+- to choose the hypothesis of driving of the adaptation
+- to set up the test of stop
+
+
+
+
diff --git a/doc/files/licence.en.txt b/doc/files/licence.en.txt
new file mode 100644 (file)
index 0000000..edd23ed
--- /dev/null
@@ -0,0 +1,20 @@
+    <HOMARD, a SALOME module for Mesh Adaptation>
+
+    Copyright (C) 1996, 2017 EDF
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+
diff --git a/doc/files/licence.fr.txt b/doc/files/licence.fr.txt
new file mode 100644 (file)
index 0000000..edd23ed
--- /dev/null
@@ -0,0 +1,20 @@
+    <HOMARD, a SALOME module for Mesh Adaptation>
+
+    Copyright (C) 1996, 2017 EDF
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+
index 68242dfd0943fb04eb3954997d1d4eb3e9812cc9..fd09700b2e12f0fd23aba48060533d0363ea3aab 100644 (file)
Binary files a/doc/files/tutorial_1.00.med.gz and b/doc/files/tutorial_1.00.med.gz differ
old mode 100644 (file)
new mode 100755 (executable)
index eaebabc..b1553c1
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 """
 Exemple de couplage HOMARD-Salome
-Copyright EDF-R&D 1996, 2010
+Copyright EDF-R&D 1996, 2010, 2014
 """
-__revision__ = "V1.2"
+__revision__ = "V2.1"
 #
+import os
+import sys
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+from tutorial_util import creation_dircase
 # ==================================
-# Repertoire a personnaliser
-# Ce repertoire contient les fichiers de donnees : tutorial_1.00.med
-# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med, maill.03.med
-dircase = "/tmp"
+DIRCASE = creation_dircase(1)
+gzip_gunzip(DATA_TUTORIAL, 1, -1)
 # ==================================
 #
 import salome
@@ -41,39 +50,43 @@ homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
 study_main = salome.myStudyManager.NewStudy("HOMARD")
 homard.SetCurrentStudy(salome.myStudy)
 #
-# Hypothesis "Hypo_0"
-# ===================
-Hypo_0 = homard.CreateHypothesis('Hypo_0')
-Hypo_0.SetAdapRefinUnRef(-1, 1, 0)
+# Hypotheses
+# ==========
+hypo_1 = homard.CreateHypothesis('hypo_1')
+hypo_1.SetUnifRefinUnRef(1)
 #
-# Case "Case_1"
-# =============
-Case_1 = homard.CreateCase('Case_1', 'MAILL', dircase+'/tutorial_1.00.med')
-Case_1.SetDirName(dircase)
-Case_1.SetConfType(1)
+# Cas
+# ===
+case_1 = homard.CreateCase('Case_1', 'MAILL', DATA_TUTORIAL+'/tutorial_1.00.med')
+case_1.SetDirName(DIRCASE)
+case_1.SetConfType(1)
 #
 # Iterations
 # ==========
-# Iteration "Iter_0"
-Iter_0 = homard.CreateIteration('Iter_0', Case_1.GetIter0Name())
-Iter_0.SetMeshName('MESH')
-Iter_0.SetMeshFile(dircase+'/maill.01.med')
-homard.AssociateIterHypo('Iter_0', 'Hypo_0')
-codret = Iter_0.Compute(1)
-
-# Iteration "Iter_1"
-Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0')
-Iter_1.SetMeshName('MESH')
-Iter_1.SetMeshFile(dircase+'/maill.02.med')
-homard.AssociateIterHypo('Iter_1', 'Hypo_0')
-codret = Iter_1.Compute(1)
+# Iteration "iter_1_1"
+iter_1_1 = case_1.NextIteration('iter_1_1')
+iter_1_1.SetMeshName('MESH')
+iter_1_1.SetMeshFile(DIRCASE+'/maill.01.med')
+iter_1_1.AssociateHypo('hypo_1')
+error = iter_1_1.Compute(1, 2)
 
-# Iteration "Iter_2"
-Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-Iter_2.SetMeshName('MESH')
-Iter_2.SetMeshFile(dircase+'/maill.03.med')
-homard.AssociateIterHypo('Iter_2', 'Hypo_0')
-codret = Iter_2.Compute(1)
+# Iteration "iter_1_2"
+iter_1_2 = iter_1_1.NextIteration('iter_1_2')
+iter_1_2.SetMeshName('MESH')
+iter_1_2.SetMeshFile(DIRCASE+'/maill.02.med')
+iter_1_2.AssociateHypo('hypo_1')
+error = iter_1_2.Compute(1, 2)
 
+# Iteration "iter_1_3"
+iter_1_3 = iter_1_2.NextIteration('iter_1_3')
+iter_1_3.SetMeshName('MESH')
+iter_1_3.SetMeshFile(DIRCASE+'/maill.03.med')
+iter_1_3.AssociateHypo('hypo_1')
+error = iter_1_3.Compute(1, 2)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 1, 1)
+# ==================================
+#
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
+  salome.sg.updateObjBrowser(True)
index 51a01c9c686500443d42d233dbb350fa1c9eaf9d..a090234c7c2857b5ec0506b5d0197764b27cc266 100644 (file)
Binary files a/doc/files/tutorial_2.00.med.gz and b/doc/files/tutorial_2.00.med.gz differ
old mode 100644 (file)
new mode 100755 (executable)
index 6f4ec23..ad00767
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 """
 Exemple de couplage HOMARD-Salome
-Copyright EDF-R&D 1996, 2010
+Copyright EDF-R&D 1996, 2010, 2014
 """
-__revision__ = "V1.3"
+__revision__ = "V2.10"
 #
+import os
+import sys
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+from tutorial_util import creation_dircase
 # ==================================
-# Repertoire a personnaliser
-# Ce repertoire contient les fichiers de donnees : tutorial_2.00.med
-# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med
-dircase = "/tmp"
+DIRCASE = creation_dircase(2)
+gzip_gunzip(DATA_TUTORIAL, 2, -1)
 # ==================================
 #
 import salome
@@ -41,8 +50,8 @@ homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
 study_main = salome.myStudyManager.NewStudy("HOMARD")
 homard.SetCurrentStudy(salome.myStudy)
 #
-# Creation of the zones
-# =====================
+# Creation des zones
+# ==================
 # Box "Zone_0"
 Zone_0 = homard.CreateZoneBox ('Zone_0', -0.1, 1.1, -0.1, 1.1, 0.9, 1.1)
 #
@@ -52,40 +61,42 @@ Zone_1 = homard.CreateZoneSphere ('Zone_1', 0., 0., 0., 1.05)
 # Box "Zone_2"
 Zone_2 = homard.CreateZoneBox ('Zone_2', -0.1, 0.51, -0.1, 0.51, -0.1, 0.51)
 #
-# Hypothesis "Hypo_0"
-# ===================
-Hypo_0 = homard.CreateHypothesis('Hypo_0')
-Hypo_0.SetAdapRefinUnRef(0, 1, 0)
-homard.AssociateHypoZone('Zone_1', 'Hypo_0')
-homard.AssociateHypoZone('Zone_0', 'Hypo_0')
-#
-# Hypothesis "Hypo_1"
-# ===================
-Hypo_1 = homard.CreateHypothesis('Hypo_1')
-Hypo_1.SetAdapRefinUnRef(0, 1, 0)
-homard.AssociateHypoZone('Zone_0', 'Hypo_1')
-homard.AssociateHypoZone('Zone_2', 'Hypo_1')
-#
-# Case "Case_1"
-# =============
-Case_1 = homard.CreateCase('Case_1', 'MZERO', dircase+'/tutorial_2.00.med')
-Case_1.SetDirName(dircase)
-#
-# Iteration "Iter_0"
-# ==================
-Iter_0 = homard.CreateIteration('Iter_0', Case_1.GetIter0Name())
-Iter_0.SetMeshName('M_1')
-Iter_0.SetMeshFile(dircase+'/maill.01.med')
-homard.AssociateIterHypo('Iter_0', 'Hypo_0')
-codret = Iter_0.Compute(1)
-#
-# Iteration "Iter_1"
+# Hypothese "hypo_2"
 # ==================
-Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0')
-Iter_1.SetMeshName('M_2')
-Iter_1.SetMeshFile(dircase+'/maill.02.med')
-homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-codret = Iter_1.Compute(1)
+hypo_2 = homard.CreateHypothesis('hypo_2')
+hypo_2.AddZone('Zone_1', 1)
+hypo_2.AddZone('Zone_0', 1)
+#
+# Hypothese "hypo_2_bis"
+# ======================
+hypo_2_bis = homard.CreateHypothesis('hypo_2_bis')
+hypo_2_bis.AddZone('Zone_0', -1)
+hypo_2_bis.AddZone('Zone_2', 1)
+#
+# Cas
+# ===
+case_2 = homard.CreateCase('Case_2', 'MZERO', DATA_TUTORIAL+'/tutorial_2.00.med')
+case_2.SetDirName(DIRCASE)
+#
+# Iteration "iter_2_1"
+# ====================
+iter_2_1 = case_2.NextIteration('iter_2_1')
+iter_2_1.SetMeshName('M_1')
+iter_2_1.SetMeshFile(DIRCASE+'/maill.01.med')
+iter_2_1.AssociateHypo('hypo_2')
+error = iter_2_1.Compute(1, 2)
+#
+# Iteration "iter_2_2"
+# ====================
+iter_2_2 = iter_2_1.NextIteration('iter_2_2')
+iter_2_2.SetMeshName('M_2')
+iter_2_2.SetMeshFile(DIRCASE+'/maill.02.med')
+iter_2_2.AssociateHypo('hypo_2_bis')
+error = iter_2_2.Compute(1, 2)
+
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 2, 1)
+# ==================================
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
+  salome.sg.updateObjBrowser(True)
index 8fb733a6b1d58cc3ad1a21d5e0947625f3227475..d99332b746e865436db77a975c8b3cde5f0ecec6 100644 (file)
Binary files a/doc/files/tutorial_3.00.med.gz and b/doc/files/tutorial_3.00.med.gz differ
index 266b495e891f5ea26871ac1909e4cb8a7e2739f6..4ea6788de9ac236048bc5d34533e2ac312181fa4 100644 (file)
Binary files a/doc/files/tutorial_3.01.med.gz and b/doc/files/tutorial_3.01.med.gz differ
old mode 100644 (file)
new mode 100755 (executable)
index c0aaeb5..07957b8
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 """
 Exemple de couplage HOMARD-Salome
-Copyright EDF-R&D 1996, 2010
+Copyright EDF-R&D 1996, 2010, 2014
 """
-__revision__ = "V1.3"
+__revision__ = "V2.1"
 #
+import os
+import sys
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+from tutorial_util import creation_dircase
 # ==================================
-# Repertoire a personnaliser
-# Ce repertoire contient les fichiers de donnees : tutorial_3.00.med, tutorial_3.01.med
-# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med
-dircase = "/tmp"
+DIRCASE = creation_dircase(3)
+gzip_gunzip(DATA_TUTORIAL, 3, -1)
 # ==================================
 #
 import salome
@@ -41,81 +50,82 @@ homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
 study_main = salome.myStudyManager.NewStudy("HOMARD")
 homard.SetCurrentStudy(salome.myStudy)
 #
-# Hypothesis "Hypo_0vers1"
-# ========================
-Hypo_0vers1 = homard.CreateHypothesis('Hypo_0vers1')
-Hypo_0vers1.SetAdapRefinUnRef(1, 1, 0)
+# Hypothese "hypo_0vers1"
+# =======================
+hypo_0vers1 = homard.CreateHypothesis('hypo_0vers1')
 # Characterization of the field
-Hypo_0vers1.SetField('SOLU_0__QIRE_ELEM_SIGM__________')
-Hypo_0vers1.SetUseComp(0)
-Hypo_0vers1.AddComp('ERREST          ')
-Hypo_0vers1.SetRefinThr(3, 1.0)
-Hypo_0vers1.SetTypeFieldInterp(2)
-Hypo_0vers1.AddFieldInterp('SOLU_0__DEPL____________________')
-Hypo_0vers1.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________')
-#
-# Hypothesis "Hypo_1vers2"
-# ========================
-Hypo_1vers2 = homard.CreateHypothesis('Hypo_1vers2')
-Hypo_1vers2.SetAdapRefinUnRef(1, 1, 1)
+hypo_0vers1.SetField('SOLU_0__QIRE_ELEM_SIGM__________')
+hypo_0vers1.SetUseComp(0)
+hypo_0vers1.AddComp('ERREST          ')
+hypo_0vers1.SetRefinThr(3, 1.0)
+hypo_0vers1.SetTypeFieldInterp(2)
+hypo_0vers1.AddFieldInterp('SOLU_0__DEPL____________________')
+hypo_0vers1.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________')
+#
+# Hypothese "hypo_1vers2"
+# =======================
+hypo_1vers2 = homard.CreateHypothesis('hypo_1vers2')
 # Characterization of the field
-Hypo_1vers2.SetField('SOLU_1__QIRE_ELEM_SIGM__________')
-Hypo_1vers2.SetUseComp(0)
-Hypo_1vers2.AddComp('ERREST          ')
-Hypo_1vers2.SetRefinThr(3, 1.5)
-Hypo_1vers2.SetUnRefThr(3, 6.)
-Hypo_1vers2.SetTypeFieldInterp(2)
-Hypo_1vers2.AddFieldInterp('SOLU_1__DEPL____________________')
-Hypo_1vers2.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________')
-#
-# Hypothesis "Hypo_1vers2_bis"
-# ============================
-Hypo_1vers2_bis = homard.CreateHypothesis('Hypo_1vers2_bis')
-Hypo_1vers2_bis.SetAdapRefinUnRef(1, 1, 1)
+hypo_1vers2.SetField('SOLU_1__QIRE_ELEM_SIGM__________')
+hypo_1vers2.SetUseComp(0)
+hypo_1vers2.AddComp('ERREST          ')
+hypo_1vers2.SetRefinThr(3, 1.5)
+hypo_1vers2.SetUnRefThr(3, 6.)
+hypo_1vers2.SetTypeFieldInterp(2)
+hypo_1vers2.AddFieldInterp('SOLU_1__DEPL____________________')
+hypo_1vers2.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________')
+#
+# Hypothese "hypo_1vers2_bis"
+# ===========================
+hypo_1vers2_bis = homard.CreateHypothesis('hypo_1vers2_bis')
 # Characterization of the field
-Hypo_1vers2_bis.SetField('SOLU_1__DEPL____________________')
-Hypo_1vers2_bis.SetUseComp(1)
-Hypo_1vers2_bis.AddComp('DX')
-Hypo_1vers2_bis.AddComp('DY')
-Hypo_1vers2_bis.AddComp('DZ')
-Hypo_1vers2_bis.SetRefinThr(1, 0.0001)
-Hypo_1vers2_bis.SetUnRefThr(1, 0.000001)
-Hypo_1vers2_bis.SetTypeFieldInterp(0)
-#
-# Case "Case_1"
-# =============
-Case_1 = homard.CreateCase('Case_1', 'G_0', dircase+'/tutorial_3.00.med')
-Case_1.SetDirName(dircase)
-#
-# Iteration "Iter_1"
-# ==================
-Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name())
-Iter_1.SetMeshName('H_1')
-Iter_1.SetMeshFile(dircase+'/maill.01.med')
-Iter_1.SetFieldFile(dircase+'/tutorial_3.00.med')
-Iter_1.SetTimeStepRank( 1, 1)
-homard.AssociateIterHypo('Iter_1', 'Hypo_0vers1')
-codret = Iter_1.Compute(1)
-#
-# Iteration "Iter_2"
-# ==================
-Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-Iter_2.SetMeshName('H_2')
-Iter_2.SetMeshFile(dircase+'/maill.02.med')
-Iter_2.SetFieldFile(dircase+'/tutorial_3.01.med')
-Iter_2.SetTimeStepRank(1, 1)
-homard.AssociateIterHypo('Iter_2', 'Hypo_1vers2')
-codret = Iter_2.Compute(1)
-#
-# Iteration "Iter_2_bis"
-# ======================
-Iter_2_bis = homard.CreateIteration('Iter_2_bis', 'Iter_1')
-Iter_2_bis.SetMeshName('H_2_bis')
-Iter_2_bis.SetMeshFile(dircase+'/maill.02.bis.med')
-Iter_2_bis.SetFieldFile(dircase+'/tutorial_3.01.med')
-Iter_2_bis.SetTimeStepRank(1, 1)
-homard.AssociateIterHypo('Iter_2_bis', 'Hypo_1vers2_bis')
-codret = Iter_2_bis.Compute(1)
-#
+hypo_1vers2_bis.SetField('SOLU_1__DEPL____________________')
+hypo_1vers2_bis.SetUseComp(1)
+hypo_1vers2_bis.AddComp('DX')
+hypo_1vers2_bis.AddComp('DY')
+hypo_1vers2_bis.AddComp('DZ')
+hypo_1vers2_bis.SetRefinThr(1, 0.0001)
+hypo_1vers2_bis.SetUnRefThr(1, 0.000001)
+hypo_1vers2_bis.SetTypeFieldInterp(0)
+#
+# Cas
+# ===
+case_3 = homard.CreateCase('Case_3', 'G_0', DATA_TUTORIAL+'/tutorial_3.00.med')
+case_3.SetDirName(DIRCASE)
+#
+# Iteration "iter_3_1"
+# ====================
+iter_3_1 = case_3.NextIteration('iter_3_1')
+iter_3_1.SetMeshName('H_1')
+iter_3_1.SetMeshFile(DIRCASE+'/maill.01.med')
+iter_3_1.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.00.med')
+iter_3_1.SetTimeStepRank( 1, 1)
+iter_3_1.AssociateHypo('hypo_0vers1')
+error = iter_3_1.Compute(1, 2)
+#
+# Iteration "iter_3_2"
+# ====================
+iter_3_2 = iter_3_1.NextIteration('iter_3_2')
+iter_3_2.SetMeshName('H_2')
+iter_3_2.SetMeshFile(DIRCASE+'/maill.02.med')
+iter_3_2.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.01.med')
+iter_3_2.SetTimeStepRank(1, 1)
+iter_3_2.AssociateHypo('hypo_1vers2')
+error = iter_3_2.Compute(1, 2)
+#
+# Iteration "iter_3_2_bis"
+# ========================
+iter_3_2_bis = iter_3_1.NextIteration('iter_3_2_bis')
+iter_3_2_bis.SetMeshName('H_2_bis')
+iter_3_2_bis.SetMeshFile(DIRCASE+'/maill.02.bis.med')
+iter_3_2_bis.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.01.med')
+iter_3_2_bis.SetTimeStepRank(1, 1)
+iter_3_2_bis.AssociateHypo('hypo_1vers2_bis')
+error = iter_3_2_bis.Compute(1, 2)
+
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 3, 1)
+# ==================================
+
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
+  salome.sg.updateObjBrowser(True)
index a9c94d7739051eb3e25d56d8b741a452c78e5886..b0bc427354a4c1453f07751be52cc802a2a56f5c 100644 (file)
Binary files a/doc/files/tutorial_4.00.med.gz and b/doc/files/tutorial_4.00.med.gz differ
index 3bdc67a462e9a92f0f6ec6f5534a79bd3a1f5bea..171bc3ade1e10706dff6448d8f41bd78bb802f0a 100644 (file)
Binary files a/doc/files/tutorial_4.fr.med.gz and b/doc/files/tutorial_4.fr.med.gz differ
old mode 100644 (file)
new mode 100755 (executable)
index c3aa70f..8b8a583
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 """
 Exemple de couplage HOMARD-Salome
-Copyright EDF-R&D 1996, 2011
+Copyright EDF-R&D 1996, 2011, 2014
 """
-__revision__ = "V1.3"
+__revision__ = "V3.1"
 #
+import os
+import sys
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+from tutorial_util import creation_dircase
 # ==================================
-# Repertoire a personnaliser
-# Ce repertoire contient les fichiers de donnees : tutorial_4.00.med, tutorial_4.fr.med
-# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med
-dircase = "/tmp"
+DIRCASE = creation_dircase(4)
+gzip_gunzip(DATA_TUTORIAL, 4, -1)
 # ==================================
 #
 import salome
@@ -41,59 +50,69 @@ homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
 study_main = salome.myStudyManager.NewStudy("HOMARD")
 homard.SetCurrentStudy(salome.myStudy)
 #
-# Creation of the boundaries
-# ==========================
-Boundary_1 = homard.CreateBoundaryDi('intersection', 'PIQUAGE', dircase+'/tutorial_4.fr.med')
+# Frontieres
+# ==========
+boun_4_1 = homard.CreateBoundaryDi('intersection', 'PIQUAGE', DATA_TUTORIAL+'/tutorial_4.fr.med')
 #
-Boundary_2 = homard.CreateBoundaryCylinder('cyl_1_ext', 0.0, 25., -25., 25., 50., 75., 100.)
+boun_4_2 = homard.CreateBoundaryCylinder('cyl_1_ext', 0.0, 25., -25., 25., 50., 75., 100.)
 #
-Boundary_3 = homard.CreateBoundaryCylinder('cyl_2_ext', 17.5, -2.5, -12.5, -100., -75., -25., 50.)
+boun_4_3 = homard.CreateBoundaryCylinder('cyl_2_ext', 17.5, -2.5, -12.5, -100., -75., -25., 50.)
 #
-Boundary_4 = homard.CreateBoundaryCylinder('cyl_1_int', 0.0, 25., -25., 25., 50., 75., 75.)
+boun_4_4 = homard.CreateBoundaryCylinder('cyl_1_int', 0.0, 25., -25., 25., 50., 75., 75.)
 #
-Boundary_5 = homard.CreateBoundaryCylinder('cyl_2_int', 17.5, -2.5, -12.5, -100., -75., -25., 25.)
+boun_4_5 = homard.CreateBoundaryCylinder('cyl_2_int', 17.5, -2.5, -12.5, -100., -75., -25., 25.)
 #
-# Hypothesis
+# Hypotheses
+# ==========
+# Creation of the hypothesis hypo_4
+hypo_4 = homard.CreateHypothesis('hypo_4')
+hypo_4.SetUnifRefinUnRef(1)
+hypo_4.AddGroup('T1_INT_I')
+hypo_4.AddGroup('T1_INT_O')
+hypo_4.AddGroup('T2_INT')
+# Creation of the hypothesis hypo_4_bis
+hypo_4_bis = homard.CreateHypothesis('hypo_4_bis')
+hypo_4_bis.SetUnifRefinUnRef(1)
+hypo_4_bis.AddGroup('T1_EXT_I')
+hypo_4_bis.AddGroup('T1_EXT_O')
+hypo_4_bis.AddGroup('T2_EXT')
+#
+# Cas
+# ===
+case_4 = homard.CreateCase('Case_4', 'PIQUAGE', DATA_TUTORIAL+'/tutorial_4.00.med')
+case_4.SetDirName(DIRCASE)
+case_4.AddBoundaryGroup( 'intersection', '' )
+case_4.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_I' )
+case_4.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_I' )
+case_4.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_O' )
+case_4.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_O' )
+case_4.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' )
+case_4.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' )
+#
+# Iterations
 # ==========
-# Creation of the hypothesis Hypo_1
-Hypo_1 = homard.CreateHypothesis('Hypo_1')
-Hypo_1.SetAdapRefinUnRef(-1, 1, 0)
-Hypo_1.AddGroup('T1_INT_I')
-Hypo_1.AddGroup('T1_INT_O')
-Hypo_1.AddGroup('T2_INT')
-# Creation of the hypothesis Hypo_2
-Hypo_2 = homard.CreateHypothesis('Hypo_2')
-Hypo_2.SetAdapRefinUnRef(-1, 1, 0)
-Hypo_2.AddGroup('T1_EXT_I')
-Hypo_2.AddGroup('T1_EXT_O')
-Hypo_2.AddGroup('T2_EXT')
-#
-# Case "Case"
-# =============
-Case = homard.CreateCase('Case', 'PIQUAGE', dircase+'/tutorial_4.00.med')
-Case.SetDirName(dircase)
-Case.AddBoundaryGroup( 'intersection', '' )
-Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_I' )
-Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_O' )
-Case.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' )
-Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_I' )
-Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_O' )
-Case.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' )
-#
-# Creation of the iterations
-# ==========================
-# Creation of the iteration Iter_1
-Iter_1 = homard.CreateIteration('Iter_1', Case.GetIter0Name() )
-Iter_1.SetMeshName('PIQUAGE_1')
-Iter_1.SetMeshFile(dircase+'/maill.01.med')
-homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-codret = Iter_1.Compute(1)
-# Creation of the iteration Iter_2
-Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1' )
-Iter_2.SetMeshName('PIQUAGE_2')
-Iter_2.SetMeshFile(dircase+'/maill.02.med')
-homard.AssociateIterHypo('Iter_2', 'Hypo_2')
-codret = Iter_2.Compute(1)
+# Iteration iter_4_1 : raffinement selon les faces internes
+iter_4_1 = case_4.NextIteration('iter_4_1')
+iter_4_1.SetMeshName('PIQUAGE_1')
+iter_4_1.SetMeshFile(DIRCASE+'/maill.01.med')
+iter_4_1.AssociateHypo('hypo_4')
+error = iter_4_1.Compute(1, 2)
+# Iteration iter_4_2 : raffinement selon les faces externes
+iter_4_2 = iter_4_1.NextIteration('iter_4_2')
+iter_4_2.SetMeshName('PIQUAGE_2')
+iter_4_2.SetMeshFile(DIRCASE+'/maill.02.med')
+iter_4_2.AssociateHypo('hypo_4_bis')
+error = iter_4_2.Compute(1, 2)
+# Iteration iter_4_3 : second raffinement selon les faces externes
+iter_4_3 = iter_4_2.NextIteration('iter_4_3')
+iter_4_3.SetMeshName('PIQUAGE_3')
+iter_4_3.SetMeshFile(DIRCASE+'/maill.03.med')
+iter_4_3.AssociateHypo('hypo_4_bis')
+error = iter_4_3.Compute(1, 2)
+
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 4, 1)
+# ==================================
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
+  salome.sg.updateObjBrowser(True)
diff --git a/doc/files/tutorial_4.xml b/doc/files/tutorial_4.xml
new file mode 100644 (file)
index 0000000..b793eee
--- /dev/null
@@ -0,0 +1,639 @@
+<?xml version='1.0' encoding='iso-8859-1' ?>
+<proc name="tutorial_4">
+   <property name="DefaultStudyID" value="1"/>
+   <objref name="CALCIUM_real" id="IDL:Ports/Calcium_Ports/Calcium_Real_Port:1.0"/>
+   <type name="string" kind="string"/>
+   <struct name="Engines/dataref">
+      <member name="ref" type="string"/>
+   </struct>
+   <objref name="HOMARD_Boundary" id="IDL:HOMARD/HOMARD_Boundary:1.0"/>
+   <objref name="HOMARD_Cas" id="IDL:HOMARD/HOMARD_Cas:1.0"/>
+   <objref name="HOMARD_Hypothesis" id="IDL:HOMARD/HOMARD_Hypothesis:1.0"/>
+   <objref name="HOMARD_Iteration" id="IDL:HOMARD/HOMARD_Iteration:1.0"/>
+   <objref name="HOMARD_Zone" id="IDL:HOMARD/HOMARD_Zone:1.0"/>
+   <objref name="Study" id="IDL:SALOMEDS/Study:1.0"/>
+   <type name="bool" kind="bool"/>
+   <sequence name="boolvec" content="bool"/>
+   <type name="double" kind="double"/>
+   <sequence name="dblevec" content="double"/>
+   <objref name="file" id="file"/>
+   <type name="int" kind="int"/>
+   <sequence name="intvec" content="int"/>
+   <struct name="stringpair">
+      <member name="name" type="string"/>
+      <member name="value" type="string"/>
+   </struct>
+   <sequence name="propvec" content="stringpair"/>
+   <objref name="pyobj" id="python:obj:1.0"/>
+   <sequence name="seqboolvec" content="boolvec"/>
+   <sequence name="seqdblevec" content="dblevec"/>
+   <sequence name="seqint" content="int"/>
+   <sequence name="seqintvec" content="intvec"/>
+   <sequence name="stringvec" content="string"/>
+   <sequence name="seqstringvec" content="stringvec"/>
+   <container name="DefaultContainer">
+      <property name="container_name" value="FactoryServer"/>
+      <property name="name" value="localhost"/>
+   </container>
+   <bloc name="Etude_Initialisation">
+      <inline name="StudyCreation">
+         <script><code><![CDATA[
+import orbmodule
+import SALOMEDS_idl
+
+import HOMARD
+import HOMARD_Gen_idl
+import HOMARD_Cas_idl
+import HOMARD_Iteration_idl
+import HOMARD_Hypothesis_idl
+import HOMARD_Zone_idl
+import HOMARD_Boundary_idl
+
+clt = orbmodule.client()
+StudyManager = clt.Resolve("/myStudyManager")
+CurrentStudy = StudyManager.GetStudyByID(1)
+]]></code></script>
+         <outport name="CurrentStudy" type="Study"/>
+      </inline>
+      <service name="SetCurrentStudy">
+         <component>HOMARD</component>
+         <load container="DefaultContainer"/>
+         <method>SetCurrentStudy</method>
+         <inport name="theStudy" type="Study"/>
+      </service>
+      <service name="CreateBoundarycyl_1_int">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateBoundaryCylinder</method>
+         <inport name="BoundaryName" type="string"/>
+         <inport name="Xcentre" type="double"/>
+         <inport name="Ycentre" type="double"/>
+         <inport name="Zcentre" type="double"/>
+         <inport name="Xaxis" type="double"/>
+         <inport name="Yaxis" type="double"/>
+         <inport name="Zaxis" type="double"/>
+         <inport name="Radius" type="double"/>
+         <outport name="return" type="HOMARD_Boundary"/>
+      </service>
+      <service name="CreateBoundarycyl_1_ext">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateBoundaryCylinder</method>
+         <inport name="BoundaryName" type="string"/>
+         <inport name="Xcentre" type="double"/>
+         <inport name="Ycentre" type="double"/>
+         <inport name="Zcentre" type="double"/>
+         <inport name="Xaxis" type="double"/>
+         <inport name="Yaxis" type="double"/>
+         <inport name="Zaxis" type="double"/>
+         <inport name="Radius" type="double"/>
+         <outport name="return" type="HOMARD_Boundary"/>
+      </service>
+      <service name="CreateBoundarycyl_2_int">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateBoundaryCylinder</method>
+         <inport name="BoundaryName" type="string"/>
+         <inport name="Xcentre" type="double"/>
+         <inport name="Ycentre" type="double"/>
+         <inport name="Zcentre" type="double"/>
+         <inport name="Xaxis" type="double"/>
+         <inport name="Yaxis" type="double"/>
+         <inport name="Zaxis" type="double"/>
+         <inport name="Radius" type="double"/>
+         <outport name="return" type="HOMARD_Boundary"/>
+      </service>
+      <service name="CreateHypothesis_1">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateHypothesis</method>
+         <inport name="HypoName" type="string"/>
+         <outport name="return" type="HOMARD_Hypothesis"/>
+      </service>
+      <service name="CreateCase">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateCase</method>
+         <inport name="CaseName" type="string"/>
+         <inport name="MeshName" type="string"/>
+         <inport name="FileName" type="string"/>
+         <outport name="return" type="HOMARD_Cas"/>
+      </service>
+      <inline name="Hypo_Options_1">
+         <script><code><![CDATA[# Raffinement uniforme
+Hypo.SetAdapRefinUnRef(-1, 1, 0)
+# Filtrage par des groupes
+Hypo.AddGroup('T1_INT_I')
+Hypo.AddGroup('T1_INT_O')
+Hypo.AddGroup('T2_INT')
+]]></code></script>
+         <inport name="Hypo" type="HOMARD_Hypothesis"/>
+      </inline>
+      <inline name="Case_Options">
+         <script><code><![CDATA[# Options
+# =========
+# Repertoire d'execution
+Case.SetDirName(DirName)
+# Options de conformite
+Case.SetConfType(1)
+# Liens avec les frontieres
+Case.AddBoundaryGroup( 'intersection', '' )
+Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_I' )
+Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_I' )
+Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_O' )
+Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_O' )
+Case.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' )
+Case.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' )
+# Resultats
+# =========
+# Iteration 0 associee
+Iter0 = Case.GetIter0()
+]]></code></script>
+         <inport name="Case" type="HOMARD_Cas"/>
+         <inport name="DirName" type="string"/>
+         <outport name="Iter0" type="HOMARD_Iteration"/>
+      </inline>
+      <service name="CreateBoundarycyl_2_ext">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateBoundaryCylinder</method>
+         <inport name="BoundaryName" type="string"/>
+         <inport name="Xcentre" type="double"/>
+         <inport name="Ycentre" type="double"/>
+         <inport name="Zcentre" type="double"/>
+         <inport name="Xaxis" type="double"/>
+         <inport name="Yaxis" type="double"/>
+         <inport name="Zaxis" type="double"/>
+         <inport name="Radius" type="double"/>
+         <outport name="return" type="HOMARD_Boundary"/>
+      </service>
+      <service name="CreateBoundaryintersection">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateBoundaryDi</method>
+         <inport name="BoundaryName" type="string"/>
+         <inport name="MeshName" type="string"/>
+         <inport name="FileName" type="string"/>
+         <outport name="return" type="HOMARD_Boundary"/>
+      </service>
+      <service name="CreateHypothesis_2">
+         <node>Etude_Initialisation.SetCurrentStudy</node>
+         <method>CreateHypothesis</method>
+         <inport name="HypoName" type="string"/>
+         <outport name="return" type="HOMARD_Hypothesis"/>
+      </service>
+      <inline name="Hypo_Options_2">
+         <script><code><![CDATA[# Raffinement uniforme
+Hypo.SetAdapRefinUnRef(-1, 1, 0)
+# Filtrage par des groupes
+Hypo.AddGroup('T1_EXT_I')
+Hypo.AddGroup('T1_EXT_O')
+Hypo.AddGroup('T2_EXT')
+]]></code></script>
+         <inport name="Hypo" type="HOMARD_Hypothesis"/>
+      </inline>
+      <control> <fromnode>StudyCreation</fromnode> <tonode>SetCurrentStudy</tonode> </control>
+      <control> <fromnode>SetCurrentStudy</fromnode> <tonode>CreateBoundarycyl_1_int</tonode> </control>
+      <control> <fromnode>CreateBoundarycyl_1_int</fromnode> <tonode>CreateBoundarycyl_1_ext</tonode> </control>
+      <control> <fromnode>CreateBoundarycyl_1_ext</fromnode> <tonode>CreateBoundarycyl_2_int</tonode> </control>
+      <control> <fromnode>CreateBoundarycyl_2_int</fromnode> <tonode>CreateBoundarycyl_2_ext</tonode> </control>
+      <control> <fromnode>CreateHypothesis_1</fromnode> <tonode>Hypo_Options_1</tonode> </control>
+      <control> <fromnode>CreateCase</fromnode> <tonode>Case_Options</tonode> </control>
+      <control> <fromnode>Hypo_Options_1</fromnode> <tonode>CreateHypothesis_2</tonode> </control>
+      <control> <fromnode>Case_Options</fromnode> <tonode>CreateHypothesis_1</tonode> </control>
+      <control> <fromnode>CreateBoundarycyl_2_ext</fromnode> <tonode>CreateBoundaryintersection</tonode> </control>
+      <control> <fromnode>CreateBoundaryintersection</fromnode> <tonode>CreateCase</tonode> </control>
+      <control> <fromnode>CreateHypothesis_2</fromnode> <tonode>Hypo_Options_2</tonode> </control>
+      <datalink control="false">
+         <fromnode>StudyCreation</fromnode> <fromport>CurrentStudy</fromport>
+         <tonode>SetCurrentStudy</tonode> <toport>theStudy</toport>
+      </datalink>
+      <datalink control="false">
+         <fromnode>CreateHypothesis_1</fromnode> <fromport>return</fromport>
+         <tonode>Hypo_Options_1</tonode> <toport>Hypo</toport>
+      </datalink>
+      <datalink control="false">
+         <fromnode>CreateCase</fromnode> <fromport>return</fromport>
+         <tonode>Case_Options</tonode> <toport>Case</toport>
+      </datalink>
+      <datalink control="false">
+         <fromnode>CreateHypothesis_2</fromnode> <fromport>return</fromport>
+         <tonode>Hypo_Options_2</tonode> <toport>Hypo</toport>
+      </datalink>
+   </bloc>
+   <forloop name="ForLoop" nsteps="2">
+      <inline name="HOMARD_2">
+         <script><code><![CDATA[import os
+#
+# Hypothese
+# =========
+# . Nom de l'hypothese
+# --------------------
+HypoName = Hypo.GetName()
+#
+# Nom de la future iteration et du futur maillage
+# ==========================
+# . Nom de l'iteration precedente
+LastIterName = LastIter.GetName()
+# . Nom du maillage precedent
+LastMeshName = LastIter.GetMeshName()#
+#
+aux = '%d' % (NumAdapt+2)
+#
+IterName = LastIterName[:-1] + aux
+MeshName = LastMeshName[:-1] + aux
+#
+# Creation de l'iteration
+# =======================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options de l'iteration
+# ======================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . Le fichier du futur maillage
+aux = '%02d' % (NumAdapt+2)
+MeshFile = os.path.join (DirName, "maill."+aux+".med")
+Iter.SetMeshFile(MeshFile)
+#
+# . Le nom du futur maillage
+Iter.SetMeshName(MeshName)
+#
+# Calcul si le precedent s'est bien passe
+# ======
+if LastPb :
+  Pb = LastPb
+  MessInfo = "Erreur dans HOMARD pour l'adaptation numero %d" % LastPb
+else :
+  Error = Iter.Compute(1, 1)
+#
+  if Error :
+    Pb = NumAdapt+2
+    MessInfo = "Erreur dans HOMARD pour l'adaptation numero %d" % NumAdapt
+  else :
+    Pb = 0
+    MessInfo = ""
+
+]]></code></script>
+         <inport name="NumAdapt" type="int"/>
+         <inport name="LastIter" type="HOMARD_Iteration"/>
+         <inport name="Hypo" type="HOMARD_Hypothesis"/>
+         <inport name="DirName" type="string"/>
+         <inport name="LastPb" type="int"/>
+         <outport name="MessInfo" type="string"/>
+         <outport name="MeshFile" type="string"/>
+         <outport name="Iter" type="HOMARD_Iteration"/>
+         <outport name="Pb" type="int"/>
+      </inline>
+      <datalink control="false">
+         <fromnode>HOMARD_2</fromnode> <fromport>Iter</fromport>
+         <tonode>HOMARD_2</tonode> <toport>LastIter</toport>
+      </datalink>
+      <datalink control="false">
+         <fromnode>HOMARD_2</fromnode> <fromport>Pb</fromport>
+         <tonode>HOMARD_2</tonode> <toport>LastPb</toport>
+      </datalink>
+   </forloop>
+   <inline name="Bilan">
+      <script><code><![CDATA[from PyQt4 import QtGui
+import sys
+app = QtGui.QApplication(sys.argv)
+if MessInfo != "" :
+    MessageBoxTitle = "Bilan"
+    QtGui.QMessageBox.warning(None, MessageBoxTitle, MessInfo)
+else :
+    MessageBoxTitle = "Bilan"
+    MessInfo = "Le maillage final est dans le fichier : " + MeshFile
+    QtGui.QMessageBox.information(None, MessageBoxTitle, MessInfo)
+]]></code></script>
+      <inport name="MessInfo" type="string"/>
+      <inport name="MeshFile" type="string"/>
+   </inline>
+   <inline name="DataInit">
+      <script><code><![CDATA[import os
+pathHomard = os.getenv("HOMARD_ROOT_DIR")
+data_dir = os.path.join(pathHomard, "share/doc/salome/gui/HOMARD/fr/_downloads")
+print "data_dir =", data_dir
+print os.listdir(data_dir)
+#
+# Maillage de la structure
+# . Nom du maillage
+MeshName = "PIQUAGE"
+# . Fichier du maillage
+FileName = os.path.join(data_dir, "tutorial_4.00.med")
+#
+# Maillage de la frontiere
+# . Nom du maillage
+BMeshName = "PIQUAGE"
+# . Fichier du maillage
+BFileName = os.path.join(data_dir, "tutorial_4.fr.med")
+#
+# Répertoire de travail
+if os.environ.has_key("LOGNAME") :
+  user = os.environ ["LOGNAME"]
+else :
+  user = "anonymous"
+DirName = os.path.join( os.sep, "tmp", "HOMARD_"+user)
+if not os.path.isdir(DirName) :
+    os.mkdir (DirName)
+]]></code></script>
+      <outport name="MeshName" type="string"/>
+      <outport name="FileName" type="string"/>
+      <outport name="BMeshName" type="string"/>
+      <outport name="BFileName" type="string"/>
+      <outport name="DirName" type="string"/>
+   </inline>
+   <inline name="HOMARD_1">
+      <script><code><![CDATA[import os
+#
+# Hypothese
+# =========
+# . Nom de l'hypothese
+# --------------------
+HypoName = Hypo.GetName()
+#
+# Nom de la future iteration et du futur maillage
+# ==========================
+# . Nom de l'iteration precedente
+LastIterName = LastIter.GetName()
+# . Nom du maillage precedent
+LastMeshName = LastIter.GetMeshName()
+#
+IterName = LastIterName + "_1"
+MeshName = LastMeshName + "_1"
+#
+# Creation de l'iteration
+# =======================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options de l'iteration
+# ======================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . Le fichier du futur maillage
+MeshFile = os.path.join (DirName, "maill.01.med")
+Iter.SetMeshFile(MeshFile)
+#
+# . Le nom du futur maillage
+Iter.SetMeshName(MeshName)
+#
+# Calcul
+# ======
+Error = Iter.Compute(1, 1)
+#
+# ============================
+# Arret si erreur
+if Error :
+    Pb = 1
+    MessInfo = "Erreur dans HOMARD pour la premiere adaptation"
+# Sinon on enchaine sur 2 autres adaptations
+else :
+    Pb= 0
+    MessInfo = ""
+
+]]></code></script>
+      <inport name="LastIter" type="HOMARD_Iteration"/>
+      <inport name="Hypo" type="HOMARD_Hypothesis"/>
+      <inport name="DirName" type="string"/>
+      <outport name="MessInfo" type="string"/>
+      <outport name="MeshFile" type="string"/>
+      <outport name="Iter" type="HOMARD_Iteration"/>
+      <outport name="Pb" type="int"/>
+   </inline>
+   <control> <fromnode>Etude_Initialisation</fromnode> <tonode>HOMARD_1</tonode> </control>
+   <control> <fromnode>ForLoop</fromnode> <tonode>Bilan</tonode> </control>
+   <control> <fromnode>DataInit</fromnode> <tonode>HOMARD_1</tonode> </control>
+   <control> <fromnode>DataInit</fromnode> <tonode>Etude_Initialisation</tonode> </control>
+   <control> <fromnode>HOMARD_1</fromnode> <tonode>ForLoop</tonode> </control>
+   <datalink control="false">
+      <fromnode>ForLoop</fromnode> <fromport>index</fromport>
+      <tonode>ForLoop.HOMARD_2</tonode> <toport>NumAdapt</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>MeshName</fromport>
+      <tonode>Etude_Initialisation.CreateCase</tonode> <toport>MeshName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>FileName</fromport>
+      <tonode>Etude_Initialisation.CreateCase</tonode> <toport>FileName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>BMeshName</fromport>
+      <tonode>Etude_Initialisation.CreateBoundaryintersection</tonode> <toport>MeshName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>BFileName</fromport>
+      <tonode>Etude_Initialisation.CreateBoundaryintersection</tonode> <toport>FileName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>DirName</fromport>
+      <tonode>HOMARD_1</tonode> <toport>DirName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>DirName</fromport>
+      <tonode>Etude_Initialisation.Case_Options</tonode> <toport>DirName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>DirName</fromport>
+      <tonode>ForLoop.HOMARD_2</tonode> <toport>DirName</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>HOMARD_1</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>HOMARD_1</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Bilan</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>HOMARD_1</fromnode> <fromport>Iter</fromport>
+      <tonode>ForLoop.HOMARD_2</tonode> <toport>LastIter</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>HOMARD_1</fromnode> <fromport>Pb</fromport>
+      <tonode>ForLoop.HOMARD_2</tonode> <toport>LastPb</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Etude_Initialisation.CreateHypothesis_2</fromnode> <fromport>return</fromport>
+      <tonode>ForLoop.HOMARD_2</tonode> <toport>Hypo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>ForLoop.HOMARD_2</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>ForLoop.HOMARD_2</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Bilan</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Etude_Initialisation.Case_Options</fromnode> <fromport>Iter0</fromport>
+      <tonode>HOMARD_1</tonode> <toport>LastIter</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Etude_Initialisation.CreateHypothesis_1</fromnode> <fromport>return</fromport>
+      <tonode>HOMARD_1</tonode> <toport>Hypo</toport>
+   </datalink>
+   <parameter>
+      <tonode>ForLoop</tonode><toport>nsteps</toport>
+      <value><int>2</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>BoundaryName</toport>
+      <value><string>cyl_1_ext</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Xcentre</toport>
+      <value><double>0</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Ycentre</toport>
+      <value><double>25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Zcentre</toport>
+      <value><double>-25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Xaxis</toport>
+      <value><double>25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Yaxis</toport>
+      <value><double>50</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Zaxis</toport>
+      <value><double>75</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_ext</tonode><toport>Radius</toport>
+      <value><double>100</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>BoundaryName</toport>
+      <value><string>cyl_1_int</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Xcentre</toport>
+      <value><double>0</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Ycentre</toport>
+      <value><double>25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Zcentre</toport>
+      <value><double>-25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Xaxis</toport>
+      <value><double>25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Yaxis</toport>
+      <value><double>50</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Zaxis</toport>
+      <value><double>75</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_1_int</tonode><toport>Radius</toport>
+      <value><double>75</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>BoundaryName</toport>
+      <value><string>cyl_2_int</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Xcentre</toport>
+      <value><double>17.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Ycentre</toport>
+      <value><double>-2.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Zcentre</toport>
+      <value><double>-12.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Xaxis</toport>
+      <value><double>-100</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Yaxis</toport>
+      <value><double>-75</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Zaxis</toport>
+      <value><double>-25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_int</tonode><toport>Radius</toport>
+      <value><double>25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateCase</tonode><toport>CaseName</toport>
+      <value><string>tutorial_4</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateHypothesis_1</tonode><toport>HypoName</toport>
+      <value><string>Hypo_1</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>BoundaryName</toport>
+      <value><string>cyl_2_ext</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Xcentre</toport>
+      <value><double>17.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Ycentre</toport>
+      <value><double>-2.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Zcentre</toport>
+      <value><double>-12.5</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Xaxis</toport>
+      <value><double>-100</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Yaxis</toport>
+      <value><double>-75</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Zaxis</toport>
+      <value><double>-25</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundarycyl_2_ext</tonode><toport>Radius</toport>
+      <value><double>50</double></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateBoundaryintersection</tonode><toport>BoundaryName</toport>
+      <value><string>intersection</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Etude_Initialisation.CreateHypothesis_2</tonode><toport>HypoName</toport>
+      <value><string>Hypo_2</string></value>
+   </parameter>
+   <presentation name="Etude_Initialisation.StudyCreation" x="2.5" y="34" width="158" height="63" expanded="1" expx="2.5" expy="34" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="ForLoop" x="385" y="802.5" width="169" height="237" expanded="1" expx="385" expy="802.5" expWidth="169" expHeight="237" shownState="0"/>
+   <presentation name="HOMARD_1" x="6" y="804.5" width="158" height="144" expanded="1" expx="6" expy="804.5" expWidth="158" expHeight="144" shownState="0"/>
+   <presentation name="DataInit" x="4" y="32" width="158" height="171" expanded="1" expx="4" expy="32" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Bilan" x="720.5" y="770" width="158" height="90" expanded="1" expx="720.5" expy="770" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="ForLoop.HOMARD_2" x="7" y="62" width="158" height="171" expanded="1" expx="7" expy="62" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Etude_Initialisation.Case_Options" x="177.5" y="358.5" width="158" height="90" expanded="1" expx="177.5" expy="358.5" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateBoundarycyl_1_ext" x="161" y="98" width="158" height="252" expanded="1" expx="161" expy="98" expWidth="158" expHeight="252" shownState="0"/>
+   <presentation name="Etude_Initialisation.SetCurrentStudy" x="161.5" y="34" width="158" height="63" expanded="1" expx="161.5" expy="34" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation" x="4" y="204" width="802" height="549" expanded="1" expx="4" expy="204" expWidth="802" expHeight="549" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateBoundarycyl_1_int" x="2.5" y="98.5" width="158" height="252" expanded="1" expx="2.5" expy="98.5" expWidth="158" expHeight="252" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateBoundarycyl_2_int" x="319.5" y="98.5" width="158" height="252" expanded="1" expx="319.5" expy="98.5" expWidth="158" expHeight="252" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateCase" x="4" y="357" width="158" height="117" expanded="1" expx="4" expy="357" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateHypothesis_1" x="4" y="481" width="158" height="63" expanded="1" expx="4" expy="481" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation.Hypo_Options_1" x="165" y="481.5" width="158" height="63" expanded="1" expx="165" expy="481.5" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateBoundarycyl_2_ext" x="479" y="99.5" width="158" height="252" expanded="1" expx="479" expy="99.5" expWidth="158" expHeight="252" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateBoundaryintersection" x="640" y="99.5" width="158" height="117" expanded="1" expx="640" expy="99.5" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Etude_Initialisation.CreateHypothesis_2" x="342.5" y="482" width="158" height="63" expanded="1" expx="342.5" expy="482" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation.Hypo_Options_2" x="517.095" y="482.405" width="158" height="63" expanded="1" expx="517.095" expy="482.405" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="__ROOT__" x="0" y="0" width="882.5" height="1043.5" expanded="1" expx="0" expy="0" expWidth="882.5" expHeight="1043.5" shownState="0"/>
+</proc>
index e017044031edbd500ec21b855f5a7aa7273e25f5..3fa867a9e310f544f3fb0db7347236e0e56842e7 100644 (file)
Binary files a/doc/files/tutorial_5.00.med.gz and b/doc/files/tutorial_5.00.med.gz differ
index 4c9ccbdd11b066ea381bcdb2805ce9ef936cc8f4..aa586d051f3a83d45b9d87908f861835c7cacca5 100644 (file)
Binary files a/doc/files/tutorial_5.fr.med.gz and b/doc/files/tutorial_5.fr.med.gz differ
old mode 100644 (file)
new mode 100755 (executable)
index a876501..cdcd96e
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf-8 -*-
 
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 """
 Exemple de couplage HOMARD-Salome
-Copyright EDF-R&D 1996, 2010
+Copyright EDF-R&D 1996, 2010, 2014
 """
-__revision__ = "V1.2"
+__revision__ = "V2.1"
 #
+import os
+import sys
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+from tutorial_util import creation_dircase
 # ==================================
-# Repertoire a personnaliser
-# Ce repertoire contient les fichiers de donnees : tutorial_5.00.med, tutorial_5.fr.med
-# Ce repertoire contiendra les fichiers de resultats : maill.01.med, maill.02.med
-dircase = "/tmp"
+DIRCASE = creation_dircase(5)
+gzip_gunzip(DATA_TUTORIAL, 5, -1)
 # ==================================
 #
 import salome
@@ -41,52 +50,53 @@ homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
 study_main = salome.myStudyManager.NewStudy("HOMARD")
 homard.SetCurrentStudy(salome.myStudy)
 #
-# Creation of the boundaries
-# ==========================
-# Creation of the discrete boundary Boun_1
-Boun_1 = homard.CreateBoundaryDi('Boun_1', 'MAIL_EXT', dircase+'/tutorial_5.fr.med')
+# Frontiere
+# =========
+# Creation of the discrete boundary boun_5_1
+boun_5_1 = homard.CreateBoundaryDi('boun_5_1', 'MAIL_EXT', DATA_TUTORIAL+'/tutorial_5.fr.med')
 #
-# Creation of the zones
-# =====================
+# Creation des zones
+# ==================
 # Creation of the disk with hole enveloppe
 enveloppe = homard.CreateZoneDiskWithHole( 'enveloppe', 0., 0., 250., 193., 1 )
 # Creation of the rectangle quart_sup
 quart_sup = homard.CreateZoneBox2D( 'quart_sup', 0., 250., 0., 250., 1 )
 #
-# Hypothesis
+# Hypotheses
 # ==========
-# Creation of the hypothesis Hypo_1
-Hypo_1 = homard.CreateHypothesis('Hypo_1')
-Hypo_1.SetAdapRefinUnRef(0, 1, 0)
-homard.AssociateHypoZone('enveloppe', 'Hypo_1')
-# Creation of the hypothesis Hypo_2
-Hypo_2 = homard.CreateHypothesis('Hypo_2')
-Hypo_2.SetAdapRefinUnRef(0, 1, 0)
-homard.AssociateHypoZone('quart_sup', 'Hypo_2')
+# Creation of the hypothesis hypo_5
+hypo_5 = homard.CreateHypothesis('hypo_5')
+hypo_5.AddZone('enveloppe', 1)
+# Creation of the hypothesis hypo_5_bis
+hypo_5_bis = homard.CreateHypothesis('hypo_5_bis')
+hypo_5_bis.AddZone('quart_sup', 1)
 #
-# Case "Case_1"
-# =============
-Case_1 = homard.CreateCase('Case_1', 'COEUR_2D', dircase+'/tutorial_5.00.med')
-Case_1.SetDirName(dircase)
-Case_1.SetConfType(3)
-Case_1.AddBoundaryGroup('Boun_1', '')
+# Cas
+# ===
+case_5 = homard.CreateCase('Case_5', 'COEUR_2D', DATA_TUTORIAL+'/tutorial_5.00.med')
+case_5.SetDirName(DIRCASE)
+case_5.SetConfType(3)
+case_5.AddBoundaryGroup('boun_5_1', '')
 #
-# Iteration "Iter_1"
-# ==================
-Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name())
-Iter_1.SetMeshName('COEUR_2D_01')
-Iter_1.SetMeshFile(dircase+'/maill.01.med')
-homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-codret = Iter_1.Compute(1)
+# Iteration "iter_5_1"
+# ====================
+iter_5_1 = case_5.NextIteration('iter_5_1')
+iter_5_1.SetMeshName('COEUR_2D_01')
+iter_5_1.SetMeshFile(DIRCASE+'/maill.01.med')
+iter_5_1.AssociateHypo('hypo_5')
+error = iter_5_1.Compute(1, 2)
 #
-# Iteration "Iter_2"
-# ==================
-Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-Iter_2.SetMeshName('COEUR_2D_02')
-Iter_2.SetMeshFile(dircase+'/maill.02.med')
-homard.AssociateIterHypo('Iter_2', 'Hypo_2')
-codret = Iter_2.Compute(1)
+# Iteration "iter_5_2"
+# ====================
+iter_5_2 = iter_5_1.NextIteration('iter_5_2')
+iter_5_2.SetMeshName('COEUR_2D_02')
+iter_5_2.SetMeshFile(DIRCASE+'/maill.02.med')
+iter_5_2.AssociateHypo('hypo_5_bis')
+error = iter_5_2.Compute(1, 2)
 
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 5, 1)
+# ==================================
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
+  salome.sg.updateObjBrowser(True)
diff --git a/doc/files/tutorial_util.py b/doc/files/tutorial_util.py
new file mode 100755 (executable)
index 0000000..5960f12
--- /dev/null
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Copyright EDF-R&D 2014
+"""
+__revision__ = "V1.3"
+
+import os
+import sys
+
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+
+#========================================================================
+#========================================================================
+def gzip_gunzip(data_dir, num_tuto, option) :
+  """
+Compression/Uncompression of the med files of a directory such as tutorial_x.nn.med
+data_dir: directory
+num_tuto: number of the tutorial
+option  : 1: compression, -1: uncompression
+Copyright EDF-R&D 2014
+  """
+#
+  ficloc_basis = "tutorial_%d" % num_tuto
+#
+  erreur = 0
+  num = -1
+#
+# Uncompression
+#
+  if ( option == -1 ) :
+#
+    while not erreur :
+      num += 1
+      ficloc = ficloc_basis + ".%02d.med" % num
+      nomfic = os.path.join(data_dir, ficloc)
+      if not os.path.isfile(nomfic) :
+        ficloc += ".gz"
+        nomfic = os.path.join(data_dir, ficloc)
+        if os.path.isfile(nomfic) :
+          os.system("gunzip "+nomfic)
+        else :
+          erreur = 1
+          break
+#
+    ficloc = ficloc_basis + ".fr.med"
+    nomfic = os.path.join(data_dir, ficloc)
+    if not os.path.isfile(nomfic) :
+      ficloc += ".gz"
+      nomfic = os.path.join(data_dir, ficloc)
+      if os.path.isfile(nomfic) :
+        os.system("gunzip "+nomfic)
+#
+# Compression
+#
+  elif ( option == 1 ) :
+#
+    while not erreur :
+      num += 1
+      ficloc = ficloc_basis + ".%02d.med.gz" % num
+      nomfic = os.path.join(data_dir, ficloc)
+      if not os.path.isfile(nomfic) :
+        ficloc = ficloc_basis + ".%02d.med" % num
+        nomfic = os.path.join(data_dir, ficloc)
+        if os.path.isfile(nomfic) :
+          os.system("gzip "+nomfic)
+        else :
+          erreur = 2
+          break
+#
+    ficloc = ficloc_basis + ".fr.med.gz"
+    nomfic = os.path.join(data_dir, ficloc)
+    if not os.path.isfile(nomfic) :
+      ficloc = ficloc_basis + ".fr.med"
+      nomfic = os.path.join(data_dir, ficloc)
+      if os.path.isfile(nomfic) :
+        os.system("gzip "+nomfic)
+#
+  return
+#
+#========================================================================
+#========================================================================
+def creation_dircase(num_tuto) :
+  """
+Creation of a directory for the results of tutorial_x
+num_tuto: number of the tutorial
+Copyright EDF-R&D 2014
+  """
+#
+  if os.environ.has_key("LOGNAME") :
+    user = os.environ ["LOGNAME"]
+  else :
+    user = "anonymous"
+  dircase = os.path.join( os.sep, "tmp", "HOMARD_"+user)
+  if not os.path.isdir(dircase) :
+    os.mkdir (dircase)
+  dirtuto_basis = "tutorial_%d" % num_tuto
+  dircase = os.path.join( dircase, dirtuto_basis )
+  if os.path.isdir(dircase) :
+    remove_dir(dircase)
+  os.mkdir (dircase)
+#
+  return dircase
+#========================================================================
+#========================================================================
+#
diff --git a/doc/files/yacs_01.en.xml b/doc/files/yacs_01.en.xml
new file mode 100644 (file)
index 0000000..bb14b6b
--- /dev/null
@@ -0,0 +1,512 @@
+<?xml version='1.0' encoding='iso-8859-1' ?>
+<proc name="HOMARD">
+   <property name="DefaultStudyID" value="1"/>
+   <objref name="CALCIUM_real" id="IDL:Ports/Calcium_Ports/Calcium_Real_Port:1.0"/>
+   <type name="string" kind="string"/>
+   <struct name="Engines/dataref">
+      <member name="ref" type="string"/>
+   </struct>
+   <objref name="HOMARD_Boundary" id="IDL:HOMARD/HOMARD_Boundary:1.0"/>
+   <objref name="HOMARD_Cas" id="IDL:HOMARD/HOMARD_Cas:1.0"/>
+   <objref name="HOMARD_Hypothesis" id="IDL:HOMARD/HOMARD_Hypothesis:1.0"/>
+   <objref name="HOMARD_Iteration" id="IDL:HOMARD/HOMARD_Iteration:1.0"/>
+   <objref name="HOMARD_Zone" id="IDL:HOMARD/HOMARD_Zone:1.0"/>
+   <objref name="Study" id="IDL:SALOMEDS/Study:1.0"/>
+   <type name="bool" kind="bool"/>
+   <sequence name="boolvec" content="bool"/>
+   <type name="double" kind="double"/>
+   <sequence name="dblevec" content="double"/>
+   <objref name="file" id="file"/>
+   <type name="int" kind="int"/>
+   <sequence name="intvec" content="int"/>
+   <struct name="stringpair">
+      <member name="name" type="string"/>
+      <member name="value" type="string"/>
+   </struct>
+   <sequence name="propvec" content="stringpair"/>
+   <objref name="pyobj" id="python:obj:1.0"/>
+   <sequence name="seqboolvec" content="boolvec"/>
+   <sequence name="seqdblevec" content="dblevec"/>
+   <sequence name="seqint" content="int"/>
+   <sequence name="seqintvec" content="intvec"/>
+   <sequence name="stringvec" content="string"/>
+   <sequence name="seqstringvec" content="stringvec"/>
+   <container name="DefaultContainer">
+      <property name="container_name" value="FactoryServer"/>
+      <property name="name" value="localhost"/>
+   </container>
+   <datanode name="DataInit">
+      <parameter name="MeshFile" type="string">
+         <value><string>/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther/maill.00.med</string></value>
+      </parameter>
+   </datanode>
+   <bloc name="Etude_Initialisation">
+      <inline name="StudyCreation">
+         <script><code><![CDATA[
+import orbmodule
+import SALOMEDS_idl
+
+import HOMARD
+import HOMARD_Gen_idl
+import HOMARD_Cas_idl
+import HOMARD_Iteration_idl
+import HOMARD_Hypothesis_idl
+import HOMARD_Zone_idl
+import HOMARD_Boundary_idl
+
+clt = orbmodule.client()
+StudyManager = clt.Resolve("/myStudyManager")
+CurrentStudy = StudyManager.GetStudyByID(1)
+]]></code></script>
+         <outport name="CurrentStudy" type="Study"/>
+      </inline>
+      <service name="SetCurrentStudy">
+         <component>HOMARD</component>
+         <load container="DefaultContainer"/>
+         <method>SetCurrentStudy</method>
+         <inport name="theStudy" type="Study"/>
+      </service>
+      <control> <fromnode>StudyCreation</fromnode> <tonode>SetCurrentStudy</tonode> </control>
+      <datalink control="false">
+         <fromnode>StudyCreation</fromnode> <fromport>CurrentStudy</fromport>
+         <tonode>SetCurrentStudy</tonode> <toport>theStudy</toport>
+      </datalink>
+   </bloc>
+   <while name="Boucle_de_convergence">
+      <bloc name="Alternance_Calcul_HOMARD">
+         <inline name="Calcul">
+            <script><code><![CDATA[
+import sys
+import os
+#
+rep_calc = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther"
+rep_script = os.path.dirname("/scratch/D68518/Salome/HOMARD_SALOME/HOMARD_SRC/doc/files/ScriptAster.py")
+sys.path.append(rep_script)
+from ScriptAster import Script
+#
+argu  = ["-v"]
+argu.append("--rep_calc=" + rep_calc)
+argu.append("--num=%d" % numCalc)
+argu.append("--mesh_file="  + MeshFile)
+#
+Script_A = Script(argu)
+#
+Error, message_erreur, dico_resu = Script_A.compute ()
+#
+dico_resu["rep_calc"] = rep_calc
+#
+]]></code></script>
+            <inport name="numCalc" type="int"/>
+            <inport name="MeshFile" type="string"/>
+            <outport name="Error" type="int"/>
+            <outport name="dico_resu" type="pyobj"/>
+         </inline>
+         <inline name="Analyse">
+            <script><code><![CDATA[
+global NumCalc
+global resu1
+# Default values
+NumCalcP1 = NumCalc + 1
+FileName = " "
+#
+NbCalcMax = 5
+#
+MessInfo = None
+Error = 0
+while not Error :
+#
+# If the computation failed, stop:
+#
+    if ErrCalc :
+        MessInfo = "Computation error # %d" % ErrCalc
+        Error = abs(ErrCalc)
+        break
+#
+# If the file is not defined, stop:
+#
+    if dico_resu.has_key("FileName") :
+        FileName = dico_resu["FileName"]
+    else :
+        MessInfo = "The file for the mesh is not defined."
+        Error = -2
+        break
+#
+# If the criterion is satisfied, stop:
+#
+    if dico_resu.has_key("V_TEST") :
+        valeur_v = dico_resu["V_TEST"]
+        if NumCalc == 0 :
+            resu1 = [valeur_v]
+        else :
+            resu1.append(valeur_v)
+        if NumCalc > 2 :
+            solu_m1 = resu1[-2]
+            rap = ( resu1[-1] - solu_m1 ) / solu_m1
+            if abs(rap) < 0.001 :
+                MessInfo = ""
+                Error = -9999
+                break
+    else :
+        MessInfo = "The value for the test is not available."
+        Error = -3
+        break
+#
+# If the maximum number of adaptations is reached, stop:
+#
+    if NumCalc > NbCalcMax :
+        MessInfo = "The maximum number of adaptations is reached: %d" % NbCalcMax
+        Error = -1
+        break
+#
+    break
+]]></code></script>
+            <inport name="NumCalc" type="int"/>
+            <inport name="ErrCalc" type="int"/>
+            <inport name="dico_resu" type="pyobj"/>
+            <outport name="Error" type="int"/>
+            <outport name="NumCalcP1" type="int"/>
+            <outport name="FileName" type="string"/>
+            <outport name="MessInfo" type="string"/>
+         </inline>
+         <switch name="Adaptation" select="0">
+            <default>
+               <bloc name="Arret_boucle">
+                  <inline name="Arret">
+                     <script><code><![CDATA[
+OK = 0
+MeshFile = " "
+]]></code></script>
+                     <inport name="MessInfo" type="string"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MeshFile" type="string"/>
+                     <outport name="MessInfo" type="string"/>
+                  </inline>
+               </bloc>
+            </default>
+            <case id="0">
+               <bloc name="Adaptation_HOMARD">
+                  <switch name="HOMARD_Initialisation" select="0">
+                     <default>
+                        <bloc name="Iter_n">
+                           <service name="LastIteration">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>LastIteration</method>
+                              <inport name="CaseName" type="string"/>
+                              <outport name="return" type="HOMARD_Iteration"/>
+                           </service>
+                           <service name="GetHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>GetHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>LastIteration</fromnode> <tonode>GetHypothesis</tonode> </control>
+                        </bloc>
+                     </default>
+                     <case id="1">
+                        <bloc name="Iter_1">
+                           <service name="CreateCase">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateCase</method>
+                              <inport name="CaseName" type="string"/>
+                              <inport name="MeshName" type="string"/>
+                              <inport name="FileName" type="string"/>
+                              <outport name="return" type="HOMARD_Cas"/>
+                           </service>
+                           <inline name="Case_Options">
+                              <script><code><![CDATA[
+import os
+# Directory for the adaptation
+DirName = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther/HOMARD"
+Case.SetDirName(DirName)
+Case.SetConfType(1)
+# Associated iteration #0
+Iter0 = Case.GetIter0()
+]]></code></script>
+                              <inport name="Case" type="HOMARD_Cas"/>
+                              <outport name="Iter0" type="HOMARD_Iteration"/>
+                           </inline>
+                           <service name="CreateHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>CreateCase</fromnode> <tonode>Case_Options</tonode> </control>
+                           <control> <fromnode>Case_Options</fromnode> <tonode>CreateHypothesis</tonode> </control>
+
+                           <datalink control="false">
+                              <fromnode>CreateCase</fromnode> <fromport>return</fromport>
+                              <tonode>Case_Options</tonode> <toport>Case</toport>
+                           </datalink>
+                        </bloc>
+                     </case>
+                  </switch>
+                  <inline name="HOMARD_Exec">
+                     <script><code><![CDATA[
+import os
+# Directory for the computation
+DirName = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther"
+MeshName = "BOX"
+#
+# Hypothesis
+# ==========
+# . Name of the hypothesis
+# ------------------------
+HypoName = Hypo.GetName()
+#
+# . Options
+# ---------
+# . Type of adaptation: refinement and unrefinement driven by a field
+Hypo.SetAdapRefinUnRef(1, 1, 1)
+# . Name of the field
+Hypo.SetField("ERREUR")
+# . Values over meshes
+Hypo.SetUseField(0)
+# . Compoment
+Hypo.AddComp("ERTABS")
+# . Driving options
+Hypo.SetRefinThr(4, 3)
+Hypo.SetUnRefThr(4, 4)
+#
+# . Interpolation
+Hypo.SetTypeFieldInterp(2)
+Hypo.AddFieldInterp("TEMPERATURE")
+#
+# . Minimum limit size of the meshes
+aux = 0.0015
+Hypo.SetDiamMin(aux)
+#
+# Name of the next iteration
+# ==========================
+# . Name of the previous iteration
+LastIterName = LastIter.GetName()
+aux = '%03d' % NumAdapt
+# . At iteration #1, addition
+if  NumAdapt == 1 :
+  IterName = LastIterName + "_" + aux
+# . Then, substitution
+else :
+  IterName = LastIterName[:-3] + aux
+#
+# Creation of the iteration
+# =========================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options of the iteration
+# ========================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . The name of the next mesh
+Iter.SetMeshName(MeshName)
+#
+# . The file of the next mesh
+aux = '%02d' % NumAdapt
+MeshFile = os.path.join (DirName, "maill."+aux+".med")
+Iter.SetMeshFile(MeshFile)
+#
+# . The file for the fields
+FileName = dico_resu["FileName"]
+Iter.SetFieldFile(FileName)
+#
+# Calculation
+# ===========
+Error = Iter.Compute(1,1)
+#
+# The loops stops if problem
+# ==========================
+if Error :
+    OK = 0
+    MessInfo = "Error in HOMARD in the adaptation # %d" % NumAdapt
+else :
+    OK = 1
+    MessInfo = " "
+]]></code></script>
+                     <inport name="NumAdapt" type="int"/>
+                     <inport name="LastIter" type="HOMARD_Iteration"/>
+                     <inport name="Hypo" type="HOMARD_Hypothesis"/>
+                     <inport name="dico_resu" type="pyobj"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MessInfo" type="string"/>
+                     <outport name="MeshFile" type="string"/>
+                  </inline>
+                  <control> <fromnode>HOMARD_Initialisation</fromnode> <tonode>HOMARD_Exec</tonode> </control>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.LastIteration</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.Case_Options</fromnode> <fromport>Iter0</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.GetHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+               </bloc>
+            </case>
+         </switch>
+         <control> <fromnode>Calcul</fromnode> <tonode>Analyse</tonode> </control>
+         <control> <fromnode>Analyse</fromnode> <tonode>Adaptation</tonode> </control>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>Error</fromport>
+            <tonode>Adaptation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Calcul</tonode> <toport>numCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>NumAdapt</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>FileName</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode> <toport>FileName</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>MessInfo</fromport>
+            <tonode>Adaptation.default_Arret_boucle.Arret</tonode> <toport>MessInfo</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>Error</fromport>
+            <tonode>Analyse</tonode> <toport>ErrCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Analyse</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+      </bloc>
+      <datalink control="false">
+         <fromnode>Alternance_Calcul_HOMARD.Analyse</fromnode> <fromport>NumCalcP1</fromport>
+         <tonode>Alternance_Calcul_HOMARD.Analyse</tonode> <toport>NumCalc</toport>
+      </datalink>
+   </while>
+   <inline name="Bilan">
+      <script><code><![CDATA[
+from PyQt4 import QtGui
+import sys
+app = QtGui.QApplication(sys.argv)
+MessageBoxTitle = "Bilan"
+if MessInfo == "" :
+    MessInfo = "The convergence is reached."
+    QtGui.QMessageBox.information(None, MessageBoxTitle, MessInfo)
+else :
+    QtGui.QMessageBox.critical(None, MessageBoxTitle, MessInfo)
+]]></code></script>
+      <inport name="MessInfo" type="string"/>
+   </inline>
+   <control> <fromnode>DataInit</fromnode> <tonode>Etude_Initialisation</tonode> </control>
+   <control> <fromnode>Etude_Initialisation</fromnode> <tonode>Boucle_de_convergence</tonode> </control>
+   <control> <fromnode>Boucle_de_convergence</fromnode> <tonode>Bilan</tonode> </control>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode><toport>numCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence</tonode><toport>condition</toport>
+      <value><boolean>true</boolean></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>NumCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>ErrCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>MeshName</toport>
+      <value><string>BOX</string></value>
+   </parameter>
+
+   <presentation name="__ROOT__" x="0" y="0" width="704" height="977" expanded="1" expx="0" expy="0" expWidth="704" expHeight="977" shownState="0"/>
+   <presentation name="DataInit" x="4" y="32" width="158" height="63" expanded="1" expx="4" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation" x="175" y="32" width="158" height="38" expanded="0" expx="175" expy="32" expWidth="162.5" expHeight="40.5" shownState="1"/>
+   <presentation name="Etude_Initialisation.StudyCreation" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Etude_Initialisation.SetCurrentStudy" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence" x="4" y="103" width="569" height="514" expanded="1" expx="4" expy="103" expWidth="569" expHeight="514" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD" x="4" y="59" width="561" height="451" expanded="1" expx="10" expy="59" expWidth="561" expHeight="451" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul" x="4" y="32" width="158" height="90" expanded="1" expx="4" expy="32" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse" x="181" y="32" width="158" height="171" expanded="1" expx="181" expy="32" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation" x="4" y="204" width="553" height="243" expanded="1" expx="4" expy="204" expWidth="553" expHeight="243" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle" x="4" y="59" width="166" height="153" expanded="1" expx="4" expy="59" expWidth="166" expHeight="153" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret" x="4" y="32" width="158" height="117" expanded="1" expx="4" expy="32" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD"  x="202" y="59" width="347" height="180" expanded="1" expx="202" expy="59" expWidth="347" expHeight="180" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation" x="4" y="32" width="158" height="65" expanded="0" expx="4" expy="32" expWidth="167" expHeight="67.5" shownState="1"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="59" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.Case_Options" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="322" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="1639.5" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec" x="185" y="32" width="158" height="144" expanded="1" expx="185" expy="32" expWidth="158" expHeight="144" shownState="0"/>
+   <presentation name="Bilan" x="350" y="32" width="158" height="63" expanded="1" expx="350" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+</proc>
+
diff --git a/doc/files/yacs_01.fr.xml b/doc/files/yacs_01.fr.xml
new file mode 100644 (file)
index 0000000..b90f482
--- /dev/null
@@ -0,0 +1,512 @@
+<?xml version='1.0' encoding='iso-8859-1' ?>
+<proc name="HOMARD">
+   <property name="DefaultStudyID" value="1"/>
+   <objref name="CALCIUM_real" id="IDL:Ports/Calcium_Ports/Calcium_Real_Port:1.0"/>
+   <type name="string" kind="string"/>
+   <struct name="Engines/dataref">
+      <member name="ref" type="string"/>
+   </struct>
+   <objref name="HOMARD_Boundary" id="IDL:HOMARD/HOMARD_Boundary:1.0"/>
+   <objref name="HOMARD_Cas" id="IDL:HOMARD/HOMARD_Cas:1.0"/>
+   <objref name="HOMARD_Hypothesis" id="IDL:HOMARD/HOMARD_Hypothesis:1.0"/>
+   <objref name="HOMARD_Iteration" id="IDL:HOMARD/HOMARD_Iteration:1.0"/>
+   <objref name="HOMARD_Zone" id="IDL:HOMARD/HOMARD_Zone:1.0"/>
+   <objref name="Study" id="IDL:SALOMEDS/Study:1.0"/>
+   <type name="bool" kind="bool"/>
+   <sequence name="boolvec" content="bool"/>
+   <type name="double" kind="double"/>
+   <sequence name="dblevec" content="double"/>
+   <objref name="file" id="file"/>
+   <type name="int" kind="int"/>
+   <sequence name="intvec" content="int"/>
+   <struct name="stringpair">
+      <member name="name" type="string"/>
+      <member name="value" type="string"/>
+   </struct>
+   <sequence name="propvec" content="stringpair"/>
+   <objref name="pyobj" id="python:obj:1.0"/>
+   <sequence name="seqboolvec" content="boolvec"/>
+   <sequence name="seqdblevec" content="dblevec"/>
+   <sequence name="seqint" content="int"/>
+   <sequence name="seqintvec" content="intvec"/>
+   <sequence name="stringvec" content="string"/>
+   <sequence name="seqstringvec" content="stringvec"/>
+   <container name="DefaultContainer">
+      <property name="container_name" value="FactoryServer"/>
+      <property name="name" value="localhost"/>
+   </container>
+   <datanode name="DataInit">
+      <parameter name="MeshFile" type="string">
+         <value><string>/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther/maill.00.med</string></value>
+      </parameter>
+   </datanode>
+   <bloc name="Etude_Initialisation">
+      <inline name="StudyCreation">
+         <script><code><![CDATA[
+import orbmodule
+import SALOMEDS_idl
+
+import HOMARD
+import HOMARD_Gen_idl
+import HOMARD_Cas_idl
+import HOMARD_Iteration_idl
+import HOMARD_Hypothesis_idl
+import HOMARD_Zone_idl
+import HOMARD_Boundary_idl
+
+clt = orbmodule.client()
+StudyManager = clt.Resolve("/myStudyManager")
+CurrentStudy = StudyManager.GetStudyByID(1)
+]]></code></script>
+         <outport name="CurrentStudy" type="Study"/>
+      </inline>
+      <service name="SetCurrentStudy">
+         <component>HOMARD</component>
+         <load container="DefaultContainer"/>
+         <method>SetCurrentStudy</method>
+         <inport name="theStudy" type="Study"/>
+      </service>
+      <control> <fromnode>StudyCreation</fromnode> <tonode>SetCurrentStudy</tonode> </control>
+      <datalink control="false">
+         <fromnode>StudyCreation</fromnode> <fromport>CurrentStudy</fromport>
+         <tonode>SetCurrentStudy</tonode> <toport>theStudy</toport>
+      </datalink>
+   </bloc>
+   <while name="Boucle_de_convergence">
+      <bloc name="Alternance_Calcul_HOMARD">
+         <inline name="Calcul">
+            <script><code><![CDATA[
+import sys
+import os
+#
+rep_calc = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther"
+rep_script = os.path.dirname("/scratch/D68518/Salome/HOMARD_SALOME/HOMARD_SRC/doc/files/ScriptAster.py")
+sys.path.append(rep_script)
+from ScriptAster import Script
+#
+argu  = ["-v"]
+argu.append("--rep_calc=" + rep_calc)
+argu.append("--num=%d" % numCalc)
+argu.append("--mesh_file="  + MeshFile)
+#
+Script_A = Script(argu)
+#
+Error, message_erreur, dico_resu = Script_A.compute ()
+#
+dico_resu["rep_calc"] = rep_calc
+#
+]]></code></script>
+            <inport name="numCalc" type="int"/>
+            <inport name="MeshFile" type="string"/>
+            <outport name="Error" type="int"/>
+            <outport name="dico_resu" type="pyobj"/>
+         </inline>
+         <inline name="Analyse">
+            <script><code><![CDATA[
+global NumCalc
+global resu1
+# Valeurs par defaut
+NumCalcP1 = NumCalc + 1
+FileName = " "
+#
+NbCalcMax = 5
+#
+MessInfo = None
+Error = 0
+while not Error :
+#
+# Si le calcul a fini en erreur, on arrete :
+#
+    if ErrCalc :
+        MessInfo = "Erreur de calcul numero %d" % ErrCalc
+        Error = abs(ErrCalc)
+        break
+#
+# Si le fichier n'a pas ete defini, on arrete :
+#
+    if dico_resu.has_key("FileName") :
+        FileName = dico_resu["FileName"]
+    else :
+        MessInfo = "Le fichier du maillage n'a pas ete defini"
+        Error = -2
+        break
+#
+# Si le critere est respecte, on arrete :
+#
+    if dico_resu.has_key("V_TEST") :
+        valeur_v = dico_resu["V_TEST"]
+        if NumCalc == 0 :
+            resu1 = [valeur_v]
+        else :
+            resu1.append(valeur_v)
+        if NumCalc > 2 :
+            solu_m1 = resu1[-2]
+            rap = ( resu1[-1] - solu_m1 ) / solu_m1
+            if abs(rap) < 0.001 :
+                MessInfo = ""
+                Error = -9999
+                break
+    else :
+        MessInfo = "La valeur a tester n'a pas ete fournie"
+        Error = -3
+        break
+#
+# Si on depasse le maximum, on arrete :
+#
+    if NumCalc > NbCalcMax :
+        MessInfo = "La limite en nombre de calculs a ete atteinte : %d" % NbCalcMax
+        Error = -1
+        break
+#
+    break
+]]></code></script>
+            <inport name="NumCalc" type="int"/>
+            <inport name="ErrCalc" type="int"/>
+            <inport name="dico_resu" type="pyobj"/>
+            <outport name="Error" type="int"/>
+            <outport name="NumCalcP1" type="int"/>
+            <outport name="FileName" type="string"/>
+            <outport name="MessInfo" type="string"/>
+         </inline>
+         <switch name="Adaptation" select="0">
+            <default>
+               <bloc name="Arret_boucle">
+                  <inline name="Arret">
+                     <script><code><![CDATA[
+OK = 0
+MeshFile = " "
+]]></code></script>
+                     <inport name="MessInfo" type="string"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MeshFile" type="string"/>
+                     <outport name="MessInfo" type="string"/>
+                  </inline>
+               </bloc>
+            </default>
+            <case id="0">
+               <bloc name="Adaptation_HOMARD">
+                  <switch name="HOMARD_Initialisation" select="0">
+                     <default>
+                        <bloc name="Iter_n">
+                           <service name="LastIteration">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>LastIteration</method>
+                              <inport name="CaseName" type="string"/>
+                              <outport name="return" type="HOMARD_Iteration"/>
+                           </service>
+                           <service name="GetHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>GetHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>LastIteration</fromnode> <tonode>GetHypothesis</tonode> </control>
+                        </bloc>
+                     </default>
+                     <case id="1">
+                        <bloc name="Iter_1">
+                           <service name="CreateCase">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateCase</method>
+                              <inport name="CaseName" type="string"/>
+                              <inport name="MeshName" type="string"/>
+                              <inport name="FileName" type="string"/>
+                              <outport name="return" type="HOMARD_Cas"/>
+                           </service>
+                           <inline name="Case_Options">
+                              <script><code><![CDATA[
+import os
+# Repertoire d'adaptation
+DirName = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther/HOMARD"
+Case.SetDirName(DirName)
+Case.SetConfType(1)
+# Iteration 0 associee
+Iter0 = Case.GetIter0()
+]]></code></script>
+                              <inport name="Case" type="HOMARD_Cas"/>
+                              <outport name="Iter0" type="HOMARD_Iteration"/>
+                           </inline>
+                           <service name="CreateHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>CreateCase</fromnode> <tonode>Case_Options</tonode> </control>
+                           <control> <fromnode>Case_Options</fromnode> <tonode>CreateHypothesis</tonode> </control>
+
+                           <datalink control="false">
+                              <fromnode>CreateCase</fromnode> <fromport>return</fromport>
+                              <tonode>Case_Options</tonode> <toport>Case</toport>
+                           </datalink>
+                        </bloc>
+                     </case>
+                  </switch>
+                  <inline name="HOMARD_Exec">
+                     <script><code><![CDATA[
+import os
+# Repertoire d'execution
+DirName = "/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther"
+MeshName = "BOX"
+#
+# Hypothese
+# =========
+# . Nom de l'hypothese
+# --------------------
+HypoName = Hypo.GetName()
+#
+# . Options
+# ---------
+# . Le mode d'adaptation : raffinement et deraffinement selon un champ
+Hypo.SetAdapRefinUnRef(1, 1, 1)
+# . Nom du champ
+Hypo.SetField("ERREUR")
+# . Valeurs prises par maille
+Hypo.SetUseField(0)
+# . Composante
+Hypo.AddComp("ERTABS")
+# . Mode de pilotage
+Hypo.SetRefinThr(4, 3)
+Hypo.SetUnRefThr(4, 4)
+#
+# . Interpolation
+Hypo.SetTypeFieldInterp(2)
+Hypo.AddFieldInterp("TEMPERATURE")
+#
+# . Taille de maille limite
+aux = 0.0015
+Hypo.SetDiamMin(aux)
+#
+# Nom de la future iteration
+# ==========================
+# . Nom de l'iteration precedente
+LastIterName = LastIter.GetName()
+aux = '%03d' % NumAdapt
+# . A l'iteration 1, on complete
+if  NumAdapt == 1 :
+  IterName = LastIterName + "_" + aux
+# . Ensuite, on substitue
+else :
+  IterName = LastIterName[:-3] + aux
+#
+# Creation de l'iteration
+# =======================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options de l'iteration
+# ======================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . Le nom du futur maillage
+Iter.SetMeshName(MeshName)
+#
+# . Le fichier du futur maillage
+aux = '%02d' % NumAdapt
+MeshFile = os.path.join (DirName, "maill."+aux+".med")
+Iter.SetMeshFile(MeshFile)
+#
+# . Le fichier contenant les champs
+FileName = dico_resu["FileName"]
+Iter.SetFieldFile(FileName)
+#
+# Calcul
+# ======
+Error = Iter.Compute(1,1)
+#
+# Arret de la boucle si erreur
+# ============================
+if Error :
+    OK = 0
+    MessInfo = "Erreur dans HOMARD pour l'adaptation numero %d" % NumAdapt
+else :
+    OK = 1
+    MessInfo = " "
+]]></code></script>
+                     <inport name="NumAdapt" type="int"/>
+                     <inport name="LastIter" type="HOMARD_Iteration"/>
+                     <inport name="Hypo" type="HOMARD_Hypothesis"/>
+                     <inport name="dico_resu" type="pyobj"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MessInfo" type="string"/>
+                     <outport name="MeshFile" type="string"/>
+                  </inline>
+                  <control> <fromnode>HOMARD_Initialisation</fromnode> <tonode>HOMARD_Exec</tonode> </control>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.LastIteration</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.Case_Options</fromnode> <fromport>Iter0</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.GetHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+               </bloc>
+            </case>
+         </switch>
+         <control> <fromnode>Calcul</fromnode> <tonode>Analyse</tonode> </control>
+         <control> <fromnode>Analyse</fromnode> <tonode>Adaptation</tonode> </control>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>Error</fromport>
+            <tonode>Adaptation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Calcul</tonode> <toport>numCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>NumAdapt</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>FileName</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode> <toport>FileName</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>MessInfo</fromport>
+            <tonode>Adaptation.default_Arret_boucle.Arret</tonode> <toport>MessInfo</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>Error</fromport>
+            <tonode>Analyse</tonode> <toport>ErrCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Analyse</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+      </bloc>
+      <datalink control="false">
+         <fromnode>Alternance_Calcul_HOMARD.Analyse</fromnode> <fromport>NumCalcP1</fromport>
+         <tonode>Alternance_Calcul_HOMARD.Analyse</tonode> <toport>NumCalc</toport>
+      </datalink>
+   </while>
+   <inline name="Bilan">
+      <script><code><![CDATA[
+from PyQt4 import QtGui
+import sys
+app = QtGui.QApplication(sys.argv)
+MessageBoxTitle = "Bilan"
+if MessInfo == "" :
+    MessInfo = "Le calcul est converge."
+    QtGui.QMessageBox.information(None, MessageBoxTitle, MessInfo)
+else :
+    QtGui.QMessageBox.critical(None, MessageBoxTitle, MessInfo)
+]]></code></script>
+      <inport name="MessInfo" type="string"/>
+   </inline>
+   <control> <fromnode>DataInit</fromnode> <tonode>Etude_Initialisation</tonode> </control>
+   <control> <fromnode>Etude_Initialisation</fromnode> <tonode>Boucle_de_convergence</tonode> </control>
+   <control> <fromnode>Boucle_de_convergence</fromnode> <tonode>Bilan</tonode> </control>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode><toport>numCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence</tonode><toport>condition</toport>
+      <value><boolean>true</boolean></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>NumCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>ErrCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>MeshName</toport>
+      <value><string>BOX</string></value>
+   </parameter>
+
+   <presentation name="__ROOT__" x="0" y="0" width="704" height="977" expanded="1" expx="0" expy="0" expWidth="704" expHeight="977" shownState="0"/>
+   <presentation name="DataInit" x="4" y="32" width="158" height="63" expanded="1" expx="4" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation" x="175" y="32" width="158" height="38" expanded="0" expx="175" expy="32" expWidth="162.5" expHeight="40.5" shownState="1"/>
+   <presentation name="Etude_Initialisation.StudyCreation" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Etude_Initialisation.SetCurrentStudy" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence" x="4" y="103" width="569" height="514" expanded="1" expx="4" expy="103" expWidth="569" expHeight="514" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD" x="4" y="59" width="561" height="451" expanded="1" expx="10" expy="59" expWidth="561" expHeight="451" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul" x="4" y="32" width="158" height="90" expanded="1" expx="4" expy="32" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse" x="181" y="32" width="158" height="171" expanded="1" expx="181" expy="32" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation" x="4" y="204" width="553" height="243" expanded="1" expx="4" expy="204" expWidth="553" expHeight="243" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle" x="4" y="59" width="166" height="153" expanded="1" expx="4" expy="59" expWidth="166" expHeight="153" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret" x="4" y="32" width="158" height="117" expanded="1" expx="4" expy="32" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD"  x="202" y="59" width="347" height="180" expanded="1" expx="202" expy="59" expWidth="347" expHeight="180" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation" x="4" y="32" width="158" height="65" expanded="0" expx="4" expy="32" expWidth="167" expHeight="67.5" shownState="1"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="59" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.Case_Options" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="322" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="1639.5" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec" x="185" y="32" width="158" height="144" expanded="1" expx="185" expy="32" expWidth="158" expHeight="144" shownState="0"/>
+   <presentation name="Bilan" x="350" y="32" width="158" height="63" expanded="1" expx="350" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+</proc>
+
diff --git a/doc/files/yacs_aster_01.comm b/doc/files/yacs_aster_01.comm
new file mode 100644 (file)
index 0000000..fa49572
--- /dev/null
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+DEBUT();
+
+BOX=LIRE_MAILLAGE(FORMAT='MED',);
+
+BETON=DEFI_MATERIAU(THER=_F(LAMBDA=8000.,
+                            RHO_CP=2.400E+6,),);
+
+MOTH=AFFE_MODELE(MAILLAGE=BOX,
+                 AFFE=_F(TOUT='OUI',
+                         PHENOMENE='THERMIQUE',
+                         MODELISATION='3D',),);
+
+#BOX=MODI_MAILLAGE( reuse=BOX,
+#                  MAILLAGE=BOX,
+#                  ORIE_PEAU_3D=_F(GROUP_MA=('CL_1','CL_2','XMIN','XMAX','YMIN','YMAX','ZMIN','ZMAX',),)
+#                )
+
+CHMAT=AFFE_MATERIAU(MAILLAGE=BOX,
+                    AFFE=_F(TOUT='OUI',
+                            MATER=BETON,),);
+
+CHTH=AFFE_CHAR_THER(MODELE=MOTH,
+                    TEMP_IMPO=(_F(GROUP_MA='CL_1',
+                                  TEMP=50.0,),
+                               _F(GROUP_MA='CL_2',
+                                  TEMP=5.0,),),
+                    FLUX_REP=(_F(GROUP_MA='XMIN',
+                                 FLUN=0.0,),
+                              _F(GROUP_MA='XMAX',
+                                 FLUN=0.0,),
+                              _F(GROUP_MA='YMIN',
+                                 FLUN=0.0,),
+                              _F(GROUP_MA='YMAX',
+                                 FLUN=0.0,),
+                              _F(GROUP_MA='ZMIN',
+                                 FLUN=0.0,),
+                              _F(GROUP_MA='ZMAX',
+                                 FLUN=0.0,),),);
+
+RESU=THER_LINEAIRE(MODELE=MOTH,
+                   CHAM_MATER=CHMAT,
+                   EXCIT=_F(CHARGE=CHTH,),);
+
+IMPR_RESU(FORMAT='MED',
+          RESU=_F(RESULTAT=RESU,
+                  NOM_CHAM='TEMP',
+                  NOM_CHAM_MED='TEMPERATURE',),);
+
+# Extraction de la temperature sur un noeud predefini
+
+TA=POST_RELEVE_T(ACTION=_F(OPERATION='EXTRACTION',
+                           INTITULE='V_TEST',
+                           RESULTAT=RESU,
+                           NOM_CHAM='TEMP',
+                           NUME_ORDRE=0,
+                           GROUP_NO='A',
+                           NOM_CMP='TEMP',),);
+
+#
+
+IMPR_TABLE(TABLE=TA,
+           NOM_PARA=('INTITULE','TEMP',),);
+
+# Calcul de l'indicateur d'erreur
+
+RESU=CALC_ERREUR(reuse =RESU,
+                 RESULTAT=RESU,
+                 OPTION='ERTH_ELEM',);
+
+
+IMPR_RESU(FORMAT='MED',
+          RESU=_F(RESULTAT=RESU,
+                  NUME_ORDRE=0,
+                  NOM_CHAM='ERTH_ELEM',
+                  NOM_CMP='ERTABS',
+                  NOM_CHAM_MED='ERREUR',),);
+
+
+FIN();
+
+#
+
+#CHECKSUM:5021673eed6e81bf9074892cd639b2ad  -:FIN CHECKSUM
diff --git a/doc/files/yacs_script.py b/doc/files/yacs_script.py
new file mode 100755 (executable)
index 0000000..be83034
--- /dev/null
@@ -0,0 +1,1428 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+"""
+Lancement d'un calcul ASTER
+"""
+__revision__ = "V5.9"
+#
+import sys
+import os
+import tempfile
+import time
+#
+# ==== Debut de personnalisation ====
+#
+# opt1_defaut, opt2_defaut : les valeurs par defaut de ces options, selon les cas
+opt1_defaut = {}
+opt2_defaut = {}
+#
+# ==== Fin de personnalisation ====
+#
+class Script :
+#
+  """
+Mode d'emploi :
+==============
+
+Cette procedure lance un calcul Aster. Avant de lancer ce script, il faut avoir cree un repertoire pour le calcul. Apres un premier calcul, qui aura ete lance traditionnellement, on aura copie le fichier '*export' sous le nom 'calcul.ref.export' dans ce repertoire.
+
+Le mode de lancement est le suivant :
+
+ScriptAster --rep_calc=rep_calc --mesh_file=mesh_file --num=nro [-dump] [-tr [--opt1=inst_deb] [--opt2=inst_fin]] [-h|-help] [-v] [-v_max]
+
+Arguments obligatoires :
+------------------------
+--rep_calc=rep_calc : le repertoire du calcul.
+--mesh_file=mesh_file : le fichier contenant le maillage sur lequel on veut calculer. Le nom est absolu ou relatif par rapport au repertoire de calcul ou a $HOME.
+--num=nro : le numero du calcul, depuis 0.
+
+Options supplementaires, selon les cas :
+----------------------------------------
+. Pour un cas transitoire avec changement des instants de debut et fin :
+On doit faire le choix -tr
+Les numeros des instants varient de 0 a N. On fournit le numero ou l'instant selon les commandes.
+--opt1=inst_deb : le numero ou l'instant initial ; si absent, on prend 0.
+--opt2=inst_fin : le numero ou l'instant final ; si absent, on va jusqu'au bout du transitoire.
+. Pour l'excavation :
+--opt1=nro_couche : le numero de la couche ; si absent, on prend 1.
+--opt2=nro_adap : le nombre d'adaptations deja realisees pour la couche ; si absent, on prend 0.
+. Pour les autres cas :
+Aucune option supplementaire.
+
+Arguments optionnels :
+----------------------
+--tr=1 : le calcul est transitoire et on change les instants ; par defaut, pas de changement.
+--wait=wait : temps d'attente en secondes entre deux examens de l'etat d'un calcul batch ; si absent, on prend 10.
+-dump : produit le fichier dump du fichier med de resultats ; par defaut, pas de dump.
+
+-h|-help : produit l'aide, quels que soient les autres arguments
+-v : mode verbeux simple
+-v_max : mode verbeux intensif
+
+Exemples :
+----------
+./ScriptAster.py --rep_calc=`pwd` --mesh_file=maill.00.med --num=0 -dump
+./ScriptAster.py --rep_calc=/scratch/D68518/HOMARD_SVN/trunk/training/tet_aster_ther --mesh_file=/scratch/D68518/Salome/Adapt/resu/maill.02.med --num=2
+  """
+#
+#====
+# 0. Les defauts
+#====
+# 0.1. ==> Les constantes de la machine
+#
+  info_gene = os.uname()
+  #print info_gene
+#
+  machine = info_gene[1]
+  serveur = machine
+  mclient = machine
+#
+# 0.2. ==> Le user
+#
+  if os.environ.has_key("LOGNAME") :
+    user = os.environ ["LOGNAME"]
+  else :
+    user = "salome"
+  username = user
+  uclient = user
+#
+# 0.3. ==> Le lancement d'Aster
+#
+  aster_root = None
+#
+  nomjob = None
+  mode = None
+# Attente en secondes entre deux controles du job
+  attente = "10"
+#
+# 0.4. ==> Information
+#
+  affiche_aide_globale = 0
+  verbose = 0
+  verbose_max = 0
+  dump = 0
+#
+  message_info = "\n"
+#
+#
+#========================= Debut de la fonction ==================================
+#
+  def __init__ ( self, liste_arg ) :
+#
+    """
+Le constructeur de la classe Script
+    """
+#
+# 1. Decodage des arguments
+#
+    self.rep_calc = None
+    self.numero = None
+    self.mesh_file = None
+    self.opt1 = None
+    self.opt2 = None
+    self.version = None
+    self.tr = 0
+#
+    for argu in liste_arg :
+#
+      #print argu
+      l_aux = argu.split("=")
+      #print l_aux
+      if len(l_aux) == 2 :
+        #print l_aux[0]
+        #print l_aux[1]
+        if l_aux[0] == "--rep_calc" :
+          self.rep_calc = l_aux[1]
+        elif l_aux[0] == "--num" :
+          self.numero = int(l_aux[1])
+        elif l_aux[0] == "--mesh_file" :
+          self.mesh_file = l_aux[1]
+        elif l_aux[0] == "--tr" :
+          self.tr = l_aux[1]
+        elif l_aux[0] == "--opt1" :
+          self.opt1 = l_aux[1]
+        elif l_aux[0] == "--opt2" :
+          self.opt2 = l_aux[1]
+        elif l_aux[0] == "--wait" :
+          self.attente = l_aux[1]
+        elif l_aux[0] == "--version" :
+          self.version = l_aux[1]
+      else :
+        saux = argu.upper()
+        if saux in ( "-H", "-HELP" ) :
+          self.affiche_aide_globale = 1
+        elif saux == "-V" :
+          self.verbose = 1
+        elif saux in ( "-V_MAX", "-VMAX" ) :
+          self.verbose = 1
+          self.verbose_max = 1
+        elif saux == "-DUMP" :
+          self.dump = 1
+#
+# 2. Les paramètres de base
+#
+    self.dico = {}
+    self.nomfic_export = None
+    self.nomcas = ""
+    self.numero_str = None
+#
+    if self.verbose_max :
+      nom_fonction = __name__ + "/__init__"
+      print "\nDans " + nom_fonction + ","
+      print ". rep_calc       :", self.rep_calc
+      print ". mesh_file      :", self.mesh_file
+      print ". numero         :", self.numero
+      print ". opt1           :", self.opt1
+      print ". opt2           :", self.opt2
+      print ". attente        :", self.attente
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def compute ( self ) :
+#
+    """
+Lancement d'un calcul
+    """
+#
+    nom_fonction = __name__ + "/compute"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    dico_resu = {}
+#
+    while not erreur :
+#
+# 1. Preparation du calcul
+#
+      #print "\n==== self.prepa_calcul () ===="
+      erreur, message_erreur = self.prepa_calcul ()
+      if erreur :
+        break
+#
+# 2. Calcul
+#
+      #print "\n==== self.calcul () ===="
+      erreur, message_erreur, fic_caract, fic_caract_2 = self.calcul ()
+      #print "erreur en sortie de self.calcul :", erreur
+      if erreur :
+        break
+#
+# 3. Attente
+#
+      #print "\n==== calcul_aster_attente.calcul (",fic_caract,") ===="
+      erreur, message_erreur = self.calcul_aster_attente (fic_caract)
+      if erreur :
+        break
+      os.remove(fic_caract)
+      os.remove(fic_caract_2)
+#
+# 4. Gestion du resultat
+#
+      #print "\n==== self.post_aster (dico_resu) ===="
+      erreur, message_erreur, dico_resu = self.post_aster (dico_resu)
+      if erreur :
+        break
+#
+# 5. Dump eventuel
+#
+      if self.dump :
+        #print "\n==== self.dump_resultat() ===="
+        erreur, message_erreur = self.dump_resultat ()
+        if erreur :
+          break
+#
+      break
+#
+    if self.verbose_max :
+      print blabla
+      print ". erreur :", erreur
+#
+    return erreur, message_erreur, dico_resu
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def prepa_calcul ( self ) :
+#
+    """
+Preparation d'un calcul
+    """
+#
+    nom_fonction = __name__ + "/prepa_calcul"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". rep_calc       :", self.rep_calc
+      print ". mesh_file      :", self.mesh_file
+      print ". tr             :", self.tr
+#
+    while not erreur :
+#
+# 1. Controles des arguments
+#
+      erreur, message_erreur = self.controle_argument()
+      if erreur :
+        break
+#
+# 2. Modification du fichier export
+#
+      erreur, message_erreur = self.modif_export()
+      if erreur :
+        break
+#
+# 3. Modifications du fichier de commandes
+# 3.1. Pour un cas transitoire
+#
+      if self.tr :
+        erreur, message_erreur = self.modif_cas_transitoire()
+        if erreur :
+          break
+#
+# 3.2. Pour l'excavation
+#
+      elif self.nomcas[:6] == "couche" :
+        erreur, message_erreur = self.modif_cas_excavation()
+        if erreur :
+          break
+#
+      break
+#
+    if self.verbose_max :
+      print blabla, "a la fin"
+      print ". erreur :", erreur
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def controle_argument ( self ) :
+#
+    """
+Controle les arguments et stockage de quelques informations
+    """
+#
+    messages_erreur = { 0 : None,
+                       -1 : "Quel repertoire de calcul ?",
+                       -3 : "Quel fichier de maillage ?",
+                       -4 : "Ce repertoire est inconnu.",
+                       -5 : "Ce fichier est inconnu.",
+                       -8 : "Quel temps d'attente ?",
+                       -9 : "Quel numero de calcul ?",
+                      -20 : "Numeros de pas de temps invalides.",
+                      -30 : "Numero de couche invalide.",
+                      -31 : "Numero d'adaptation invalide." }
+#
+    nom_fonction = __name__ + "/controle_argument"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". rep_calc       :", self.rep_calc
+      print ". mesh_file      :", self.mesh_file
+      print ". numero         :", self.numero
+      print ". tr             :", self.tr
+      print ". opt1           :", self.opt1
+      print ". opt2           :", self.opt2
+      print ". attente        :", self.attente
+#
+    while not erreur :
+#
+# 1. Les repertoire et fichier
+# 1.1. Il y a bien eu une donnee
+#
+      if self.rep_calc == None :
+        erreur = -1
+      elif self.mesh_file == None :
+        erreur = -3
+      if erreur < 0 :
+        self.message_info += "Relancer avec -h pour avoir le mode d'emploi."
+        break
+#
+# 1.2. Le repertoire de calcul
+#
+      if os.environ.has_key("HOME") :
+        HOME = os.environ ["HOME"]
+      else :
+        HOME = "/local/home/salome"
+#
+      if ( self.rep_calc[:1] == "~" ) :
+        self.rep_calc = os.path.join(HOME, self.rep_calc[2:])
+      if not os.path.isdir(self.rep_calc) :
+        self.message_info += "Repertoire " + self.rep_calc
+        erreur = -4
+        break
+      else :
+        aux = os.path.join(os.getcwd(), self.rep_calc)
+        self.rep_calc = os.path.normpath(aux)
+#
+# 1.3. Les fichiers
+#
+      fic = self.mesh_file
+#
+      if ( fic[:1] == "~" ) :
+        fic = os.path.join(HOME, fic[2:])
+      if not os.path.isfile(fic) :
+        aux = os.path.join(self.rep_calc, fic)
+        if not os.path.isfile(aux) :
+          self.message_info += "Fichier : " + fic
+          erreur = -5
+          break
+        else :
+          fic = os.path.normpath(aux)
+      aux = os.path.join(os.getcwd(), fic)
+#
+      self.mesh_file = os.path.normpath(aux)
+#
+# 2. On en deduit le cas
+#
+      self.nomcas = os.path.basename(self.rep_calc)
+      if self.verbose_max :
+        print ". Cas :", self.nomcas
+#
+# 3. Le temps d'attente
+#
+      iaux = None
+      try :
+        iaux = int(self.attente)
+      except :
+        erreur = -8
+        break
+      self.attente = iaux
+#
+# 4. Le numero du calcul
+#
+      if self.numero == None :
+        erreur = -9
+#
+      if ( self.numero < 100 ) :
+        self.numero_str = "%02d" % self.numero
+      elif ( self.numero < 1000 ) :
+        self.numero_str = "%03d" % self.numero
+      elif ( self.numero < 10000 ) :
+        self.numero_str = "%04d" % self.numero
+      else :
+        self.numero_str = "%d" % self.numero
+#
+# 5. Options speciales pour les cas transitoires et pour l'excavation
+#
+      if ( self.tr or ( self.nomcas[:6] == "couche" ) ) :
+#
+        if self.opt1 == None :
+          self.opt1 = opt1_defaut[self.nomcas]
+          #print ". opt1 defaut :", self.opt1
+#
+        if self.opt2 == None :
+          self.opt2 = opt2_defaut[self.nomcas]
+          #print ". opt2 defaut :", self.opt2
+#
+# 5.1. Pour un cas transitoire
+#
+      if self.tr :
+#
+        iaux1 = None
+        daux1 = None
+        try :
+          iaux1 = int(self.opt1)
+        except :
+          daux1 = float(self.opt1)
+        if ( iaux1 == 0 ) :
+          daux1 = 0.
+#
+        iaux2 = None
+        daux2 = None
+        try :
+          iaux2 = int(self.opt2)
+        except :
+          daux2 = float(self.opt2)
+#
+        if ( ( daux1 == None ) or  ( daux2 == None ) ) :
+          #print "------------ ( daux1 == None ) or  ( daux2 == None ) ------------"
+          #print "iaux1, iaux2 =", iaux1, iaux2
+          if iaux2 < iaux1 :
+            erreur = -20
+        elif ( ( iaux1 == None ) or  ( iaux2 == None ) ) :
+          #print "------------ ( iaux1 == None ) or  ( iaux2 == None ) ------------"
+          #print "daux1, daux2 =", daux1, daux2
+          if daux2 < daux1 :
+            erreur = -20
+        else :
+          erreur = -20
+#
+        if erreur :
+          self.message_info += "opt1 = " + self.opt1
+          self.message_info += "\nopt2 = " + self.opt2
+#
+# 5.2. Pour l'excavation
+#
+      elif self.nomcas[:6] == "couche" :
+#
+        iaux1 = None
+        try :
+          iaux1 = int(self.opt1)
+        except :
+          erreur = -30
+#
+        if ( ( iaux1 < 1 ) or ( iaux1 > 20 ) ) :
+          #print "iaux1 =", iaux1
+          erreur = -30
+#
+        iaux2 = None
+        try :
+          iaux2 = int(self.opt2)
+        except :
+          erreur = -31
+#
+        if ( iaux2 < 0 ) :
+          #print "iaux1 =", iaux1
+          erreur = -31
+#
+        if erreur :
+          self.message_info += "nro_mail = " + self.numero
+          self.message_info += "\nopt1 = " + self.opt1
+          self.message_info += "\nopt2 = " + self.opt2
+          break
+#
+        self.nro_couche = iaux1
+        self.nro_adap = iaux2
+#
+      break
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    if self.verbose_max :
+      print ". rep_calc  :", self.rep_calc
+      print ". mesh_file :", self.mesh_file
+      print ". opt1      :", self.opt1
+      print ". opt2      :", self.opt2
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def modif_export ( self ) :
+#
+    """
+Modification du fichier export et reperage de quelques informations
+    """
+#
+    messages_erreur = { 0 : None }
+#
+    nom_fonction = __name__ + "/modif_export"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". numero     :", self.numero
+      print ". mesh_file  :", self.mesh_file
+#
+    while not erreur :
+#
+# 1. Lecture du fichier export original
+#
+      fic_export_ref = os.path.join(self.rep_calc, "calcul.ref.export")
+      fic = open (fic_export_ref, "r")
+      les_lignes = fic.readlines()
+      fic.close()
+#
+# 2. Ouverture du nouveau fichier export
+#
+      nomfic = "calcul"
+      if self.nomcas[:6] == "couche" :
+        nomfic += ".%02d" % self.nro_couche
+      nomfic += "." + self.numero_str + ".export"
+      self.nomfic_export = os.path.join(self.rep_calc, nomfic)
+      if self.verbose_max :
+        print ". nouveau fic_export :", self.nomfic_export
+      fic = open (self.nomfic_export, "w")
+#
+# 3. Exploration des lignes
+#
+      for ligne in les_lignes :
+#
+# 3.1. Pas de modification, a priori
+#
+        ligne_bis = ligne
+        saux = ""
+#
+# 3.2. Decodage des composants de la ligne pour un fichier
+#
+        if ligne[0:2] == "F " :
+#
+          chgt = False
+#
+          laux = ligne.split()
+          #print laux
+          typfic = laux[1]
+          statut = laux[3]
+          #print typfic
+#
+          nomfic_0 = laux[2]
+          if ( ":" in nomfic_0 ) :
+            laux1 = nomfic_0.split(":")
+            saux = laux1[0] + ":"
+            nomfic_0 = laux1[1]
+#
+# 3.2.1. Si c'est le fichier de commandes, mise a jour du nom du repertoire
+#
+          if ( typfic == "comm" ) :
+#
+            if self.verbose_max :
+              print ". Commandes : mise a jour du nom du repertoire"
+            chgt = True
+            nomfic_l_0 = os.path.basename(nomfic_0)
+            nomfic = os.path.join(self.rep_calc, nomfic_l_0)
+#
+# 3.2.2. Si c'est un fichier de resultats ou le fichier de maillage, mise a jour du nom
+#
+          elif ( ( statut == "R" ) or ( typfic == "mmed" ) ) :
+            if self.verbose_max :
+              print ". Mise a jour du nom"
+            chgt = True
+#
+# 3.2.2.1. Le fichier de maillage est celui passe en argument
+#
+            if typfic == "mmed" :
+              nomfic = self.mesh_file
+#
+# 3.2.2.2. Pour les autres fichiers, on recupère le nom initial
+#
+            else :
+              nomfic_l_0 = os.path.basename(nomfic_0)
+              laux1 = nomfic_l_0.split(".")
+              #print "laux1 =", laux1
+#
+# 3.2.2.2.1. Base des noms de fichiers si excavation
+#
+              if laux1[0] == "couche_n" :
+                saux0 = "couche_%02d" % self.nro_couche
+              else :
+                iaux = len(laux1[-1]) + 1
+                saux0 = nomfic_l_0[:-iaux]
+              #print "saux0 =", saux0
+#
+# 3.2.2.2.2. Indicage des fichiers
+#
+              nomfic_l = saux0 + "." + self.numero_str + "." + laux1[-1]
+              nomfic_l_1 = os.path.dirname(nomfic_0)
+              nomfic = os.path.join(nomfic_l_1, nomfic_l)
+            #print "   ==> ", nomfic
+#
+          if chgt :
+            ligne_bis  = laux[0] + " " + laux[1] + " " + saux
+            ligne_bis += nomfic + " "
+            ligne_bis += laux[3] + " " + laux[4] + "\n"
+#
+# 3.2.2.3. On detruit preventivement les fichiers des resultats
+#
+          if ( statut == "R" ) :
+            if ( self.nomcas[:6] != "couche" ) :
+              if os.path.isfile(nomfic) :
+                os.remove(nomfic)
+#
+# 3.2.3. Memorisation des noms
+#
+          self.dico[typfic] = nomfic
+#
+# 3.3. Decodage des composants de la ligne pour la base
+#
+        elif ligne[0:2] == "R " :
+#
+          laux = ligne.split()
+          #print laux
+          typfic = laux[1]
+          #print typfic
+#
+# 3.3.1. Si c'est le fichier de la base, on recupere le nom initial, en ajustant l'indice
+#
+          if typfic in ( "base", "bhdf" ) :
+#
+            nomfic_0 = laux[2]
+            if ( ":" in nomfic_0 ) :
+              laux1 = nomfic_0.split(":")
+              saux = laux1[0] + ":"
+              nomfic_0 = laux1[1]
+            nomfic_l_0 = os.path.basename(nomfic_0)
+            laux1 = nomfic_l_0.split(".")
+            if len(laux1) >= 3 :
+              nomfic_l = laux1[0] + "." + self.numero_str + "." + laux1[2]
+            elif len(laux1) >= 2 :
+              if laux1[0] == "couche_nm1" :
+                saux0 = "couche_%02d" % (self.nro_couche-1)
+              elif laux1[0] == "couche_n" :
+                saux0 = "couche_%02d" % self.nro_couche
+              else :
+                saux0 = laux1[0]
+              nomfic_l = saux0 + "." + laux1[1]
+            else :
+              nomfic_l = nomfic_l_0
+            nomfic_l_1 = os.path.dirname(nomfic_0)
+            nomfic = os.path.join(nomfic_l_1, nomfic_l)
+#
+            ligne_bis  = laux[0] + " " + laux[1] + " " + saux
+            ligne_bis += nomfic + " "
+            ligne_bis += laux[3] + " " + laux[4] + "\n"
+#
+# 3.4. Decodage des composants de la ligne pour un parametre
+#
+        elif ligne[0:2] == "P " :
+#
+          laux = ligne.split()
+          #print laux
+          if ( len(laux) == 3 ) :
+            aux = laux[2]
+            if laux[1] in ( "username" ) :
+              self.username = aux
+            elif laux[1] in ( "uclient" ) :
+              self.uclient = aux
+            elif laux[1] in ( "aster_root" ) :
+              self.aster_root = aux
+            elif laux[1] in ( "serveur" ) :
+              self.serveur = aux
+            elif laux[1] in ( "mclient" ) :
+              self.mclient = aux
+            #elif laux[1] in ( "display" ) :
+              #aux = self.machine+":0.0"
+            elif laux[1] in ( "nomjob" ) :
+              self.nomjob = aux
+            elif laux[1] in ( "mode" ) :
+              self.mode = aux
+            ligne_bis  = laux[0] + " " + laux[1] + " " + aux  + "\n"
+#
+# 3.5. Ecriture de la ligne
+#
+        fic.write(ligne_bis)
+#
+      fic.close()
+#
+      break
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    if self.verbose_max :
+      print ". mclient    ", self.mclient
+      print ". uclient    ", self.uclient
+      print ". serveur    ", self.serveur
+      print ". username   ", self.username
+      print ". aster_root ", self.aster_root
+      print ". nomjob     ", self.nomjob
+      print ". mode       ", self.mode
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def modif_cas_transitoire ( self ) :
+#
+    """
+Modification du fichier de commandes lie au cas transitoire
+    """
+#
+    messages_erreur = { 0 : None,
+                        2 : "Mot_cle inconnu dans les commandes." }
+#
+    nom_fonction = __name__ + "/modif_cas_transitoire"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". opt1 :", self.opt1
+      print ". opt2 :", self.opt2
+#
+    while not erreur :
+#
+# 1. Lecture du fichier de commandes
+#
+      nomfic = os.path.join(self.rep_calc, self.dico["comm"])
+      fic = open (nomfic, "r")
+      les_lignes = fic.readlines()
+      fic.close()
+#
+# 2. Ouverture du nouveau fichier de commandes
+#
+      fic = open (nomfic, "w")
+#
+# 3. Exploration des lignes
+#
+# 3.0. Reperage de la zone a modifier
+#
+      A_modifier = 0
+#
+      for ligne in les_lignes :
+#
+        if self.verbose_max :
+          print "ligne =", ligne[:-1]
+#
+# 3.1. Pas de modification, a priori
+#
+        ligne_bis = ligne
+#
+# 3.2. Reperage de la zone a modifier
+#
+        if ( "A PERSONNALISER - DEBUT" in ligne ) :
+          A_modifier = 1
+        elif ( "A PERSONNALISER - FIN" in ligne ) :
+          A_modifier = 0
+#
+# 3.3. Modification
+#
+        #print "A_modifier =", A_modifier
+        if A_modifier :
+#
+          #print "ligne =", ligne[:-1]
+          for iaux in range(2) :
+            if iaux == 0 :
+              mot_cle_ref = "NUME_INST_"
+              lg_mot_cle = 10
+            else :
+              mot_cle_ref = "INST_"
+              lg_mot_cle = 5
+            #print "mot_cle_ref =", mot_cle_ref
+#
+            if ligne[0:lg_mot_cle] == mot_cle_ref :
+#
+              if ligne[lg_mot_cle:lg_mot_cle+4] == "INIT" :
+                aux = self.opt1
+                motcle = ligne[0:lg_mot_cle+4]
+              elif ligne[lg_mot_cle:lg_mot_cle+3] == "FIN" :
+                aux = self.opt2
+                motcle = ligne[0:lg_mot_cle+3]
+              else :
+                self.message_info += ligne
+                erreur = 2
+                break
+#
+              ligne_bis = motcle + " = " + str(aux) +"\n"
+#
+          if erreur :
+            break
+#
+# 3.4. Ecriture de la ligne
+#
+        fic.write(ligne_bis)
+#
+      fic.close()
+#
+      break
+#
+# 4. Gestion des erreurs
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def modif_cas_excavation ( self ) :
+#
+    """
+Modification du fichier de commandes lie au cas de l'excavation
+    """
+#
+    messages_erreur = { 0 : None }
+#
+    nom_fonction = __name__ + "/modif_cas_excavation"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". numero     :", self.numero
+      print ". nro_couche :", self.nro_couche
+      print ". nro_adap   :", self.nro_adap
+#
+    while not erreur :
+#
+# 1. Lecture du fichier de commandes
+#
+      nomfic = os.path.join(self.rep_calc, self.dico["comm"])
+      fic = open (nomfic, "r")
+      les_lignes = fic.readlines()
+      fic.close()
+#
+# 2. Ouverture du nouveau fichier de commandes
+#
+      fic = open (nomfic, "w")
+#
+# 3. Exploration des lignes
+#
+# 3.0. Reperage de la zone a modifier
+#
+      A_modifier = 0
+#
+      for ligne in les_lignes :
+#
+        if self.verbose_max :
+          print "ligne =", ligne[:-1]
+#
+# 3.1. Pas de modification, a priori
+#
+        ligne_bis = ligne
+#
+# 3.2. Reperage de la zone a modifier
+#
+        if ( "A PERSONNALISER - DEBUT" in ligne ) :
+          A_modifier = 1
+        elif ( "A PERSONNALISER - FIN" in ligne ) :
+          A_modifier = 0
+#
+# 3.3. Modification
+#
+        #print "A_modifier =", A_modifier
+        if A_modifier :
+#
+          #print "ligne =", ligne[:-1]
+          for iaux in range(3) :
+            if iaux == 0 :
+              mot_cle_ref = "nro_mail"
+              lg_mot_cle = 8
+              aux = self.numero
+            elif iaux == 1 :
+              mot_cle_ref = "nro_couche"
+              lg_mot_cle = 10
+              aux = self.nro_couche
+            elif iaux == 2 :
+              mot_cle_ref = "nro_adap"
+              lg_mot_cle = 8
+              aux = self.nro_adap
+            #print "mot_cle_ref =", mot_cle_ref
+#
+            if ligne[0:lg_mot_cle] == mot_cle_ref :
+              #print "==> aux =", aux, type(aux)
+              ligne_bis = mot_cle_ref + " = " + str(aux) +"\n"
+#
+# 3.4. Ecriture de la ligne
+#
+        fic.write(ligne_bis)
+#
+      fic.close()
+#
+      break
+#
+# 4. Gestion des erreurs
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def calcul ( self ) :
+#
+    """
+Lancement d'un calcul
+    """
+#
+    messages_erreur = { 0 : None }
+#
+    nom_fonction = __name__ + "/calcul"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print ". mclient    ", self.mclient
+      print ". serveur    ", self.serveur
+#
+# 1. Copie du fichier export sur le serveur de calcul
+#
+    if ( self.mclient != self.serveur ) :
+#
+      nomfic_export_dist = self.nomjob + ".export"
+      commande = "scp " + self.nomfic_export + " " + self.username + "@" + self.serveur + ":" + nomfic_export_dist
+      if self.verbose_max :
+        print "Copie du fichier export vers", self.serveur, ":"
+        print commande
+      erreur = os.system(commande)
+#
+# 2. Commande du lancement
+#
+    commande_base  = os.path.join(self.aster_root, "bin", "as_run")
+    commande_base += " "
+    if self.mode == "batch" :
+      commande_base += "--serv "
+    commande_base += self.username + "@" + self.serveur + ":"
+    #if self.verbose_max :
+      #print commande_base
+#
+    t_aux = tempfile.mkstemp()
+    fic_caract   = t_aux[1]
+    t_aux = tempfile.mkstemp()
+    fic_caract_2 = t_aux[1]
+#
+# 3. Lancement
+# 3.1. Commande finale
+#
+    if ( self.mclient == self.serveur ) :
+      commande  = commande_base
+      commande += commande_base + self.nomfic_export
+    else :
+      commande  = "ssh " + self.username + "@" + self.serveur
+      commande += " \"" + commande_base + nomfic_export_dist + "\""
+    commande += " 1>" + fic_caract
+    commande += " 2>" + fic_caract_2
+    if self.verbose_max :
+      print "Lancement sur", self.serveur, ":"
+      print commande
+#
+# 3.2. Lancement vrai
+#
+    erreur = os.system(commande)
+    if erreur :
+      messages_erreur[erreur] = "erreur de calcul numero %d" % erreur
+    else :
+      self.message_info += "resultat dans le fichier :\n"
+      #print self.dico
+      self.message_info += self.dico["rmed"]+"\n"
+#
+    if self.verbose_max :
+      print blabla
+      print ". erreur     :", erreur
+      print ". self.mode  :", self.mode
+      print ". fic_caract :", fic_caract
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur, fic_caract, fic_caract_2
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def calcul_aster_attente ( self, fic_caract ) :
+#
+    """
+Bilan du calcul Aster
+fic_caract : fichier caracteristique du job
+    """
+#
+    nom_fonction = __name__ + "/calcul_aster_attente"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print ". fic_caract :", fic_caract
+      print ". nomjob     :", self.nomjob
+      print ". rep_calc   :", self.rep_calc
+      print ". mode       :", self.mode
+      print ". attente    :", self.attente
+#
+    if ( self.mode != "interactif" ) :
+#
+# 1. Recuperation du numero de job
+#
+      fic = open (fic_caract, "r")
+      les_lignes = fic.readlines()
+      fic.close()
+  #
+      for ligne in les_lignes :
+        #print ligne
+        if ( len(ligne)>0 ) :
+          # en batch :
+          if "JOBID" in ligne :
+            #print ligne
+            laux = ligne.split()
+            laux1 = laux[0].split("=")
+            numjob = laux1[1]
+          # en interactif :
+          elif "num_job" in ligne :
+            #print ligne
+            laux = ligne.split("num_job")
+            laux1 = laux[1].split()
+            numjob = laux1[0]
+  #
+      if self.verbose :
+        print ". numjob :", numjob
+#
+# 2. Commande de l'examen de l'etat du job,
+#
+      fic_etat = os.path.join(self.rep_calc, self.nomjob+".etat")
+      t_aux = tempfile.mkstemp()
+      fic_etat_2   = t_aux[1]
+      commande_base  = os.path.join(self.aster_root, "bin", "as_run")
+      commande_base += " --actu " + numjob + " " + self.nomjob + " " + self.mode
+      if self.verbose_max :
+        print "commande_base =", commande_base
+      if ( self.mclient == self.serveur ) :
+        commande  = commande_base
+      else :
+        commande  = "ssh " + self.username + "@" + self.serveur
+        commande += " \"" + commande_base + "\""
+      commande += " 1>" + fic_etat
+      commande += " 2>" + fic_etat_2
+      if self.verbose_max :
+        print "Examen sur", self.serveur, ":"
+        print commande
+#
+# 3. Examen de l'etat du job, jusqu'a la fin
+#
+      encore = 1
+      while encore :
+  #
+        if encore % 4 == 0 :
+          aux = ((encore-1)*self.attente) / 60
+          print "..", aux, "mn"
+          #print diag
+  #
+        time.sleep(self.attente)
+        erreur = os.system(commande)
+  #
+        if erreur :
+          erreur = -1
+          break
+        elif os.path.isfile(fic_etat) :
+          fic = open (fic_etat, "r")
+          les_lignes = fic.readlines()
+          fic.close()
+          if len(les_lignes) > 0 :
+            if len(les_lignes[0]) > 0 :
+              laux = les_lignes[0].split()
+              laux1 = laux[0].split("=")
+              etat = laux1[1]
+              laux1 = laux[1].split("=")
+              diag = laux1[1]
+              if self.verbose_max :
+                print etat, diag
+              if etat in ( "RUN", "PEND" ) :
+                encore += 1
+              else :
+                if etat != "ENDED" :
+                  self.message_info += "Etat du job : " + etat
+                  erreur = -2
+                else :
+                  if diag[:3] in ( "<S>", "<F>" ) :
+                    erreur = -3
+                if erreur :
+                  self.message_info = "Diagnostic du job : " + diag + "\n"
+                encore = 0
+                break
+            else :
+              encore += 1
+          else :
+            encore += 1
+        else :
+          erreur = -4
+          break
+#
+      os.remove(fic_etat_2)
+#
+    if self.verbose_max :
+      print blabla
+      print ". erreur :", erreur
+#
+    if erreur :
+      message_erreur = "Erreur dans le calcul"
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def post_aster ( self, dico_resu_init ) :
+#
+    """
+Affichage de resultats selon les cas
+    """
+#
+    messages_erreur = { 0 : None,
+                        1 : "Ce fichier est inconnu." }
+#
+    nom_fonction = __name__ + "/post_aster"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    dico_resu = {}
+    for cle in dico_resu_init.keys() :
+      dico_resu[cle] = dico_resu_init[cle]
+#
+    while not erreur :
+#
+# 1. Exploration du fichier resu
+#
+# 1.1. Recuperation du contenu
+#
+      nomfic = self.dico["resu"]
+      chaine = "V_TEST"
+      nuocc = 1
+      erreur, message_erreur, info = self.post_aster_1 ( nomfic, chaine, nuocc )
+      if ( erreur > 0 ) :
+        break
+#
+# 1.2. Details
+#
+      if ( erreur == 0 ) :
+        self.message_info += info[:-1]
+        info = info.replace(chaine, " ")
+        laux = info[:-1].split()
+        aux = laux[0]
+        if ( "D" in aux ) :
+          aux = aux.replace("D", "E")
+        dico_resu[chaine] = float(aux)
+      else :
+        erreur = 0
+        message_erreur = " "
+#
+# 2. Exploration du fichier mess
+# 2.1. Que chercher ?
+#
+      for chaine in ( "INSTANT", "NOMBRE DE NOEUDS", "NOMBRE DE MAILLES" ) :
+#
+# 2.2. Recuperation du contenu
+#
+        nomfic = self.dico["mess"]
+        if chaine == "INSTANT" :
+          nuocc = 0
+        else :
+          nuocc = 1
+        erreur, message_erreur, info = self.post_aster_1 ( nomfic, chaine, nuocc )
+        if ( erreur > 0 ) :
+          break
+#
+# 2.3. Details
+#
+        if ( erreur == 0 ) :
+          self.message_info += info[:-1]
+          if chaine == "INSTANT" :
+            l_aux = info[:-1].split()
+            lg_aux = len(l_aux)
+            for iaux in range(lg_aux) :
+              if ( "ORDRE" in l_aux[iaux] ) :
+                if l_aux[iaux+1] == ":" :
+                  jaux = iaux+2
+                else :
+                  jaux = iaux+1
+                ordre = int(l_aux[jaux])
+                dico_resu["ORDRE"] = ordre
+                dico_resu["PAS_DE_TEMPS"] = ordre
+          elif chaine in ( "NOMBRE DE NOEUDS", "NOMBRE DE MAILLES" ) :
+            l_aux = info[:-1].split(chaine)
+            dico_resu[chaine] = int(l_aux[1])
+        else :
+          erreur = 0
+          message_erreur = " "
+#
+      if erreur :
+        break
+#
+# 3. Fichier de resultats au format med
+#
+      dico_resu["FileName"] = self.dico["rmed"]
+#
+      break
+#
+    if self.verbose :
+      print blabla
+      print ". erreur :", erreur
+      print ". dico_resu :", dico_resu
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur, dico_resu
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def post_aster_1 ( self, nomfic, chaine, nuocc ) :
+#
+    """
+Decodage de fichier
+nomfic = nom du fichier a decoder
+chaine = chaine a chercher
+nuocc = numero de l'occurence a chercher, 0 si toutes
+Retour :
+codret = 0 : tout va bien
+         1 : le fichier de resultats est absent
+        -1 : la chaine est absente
+message_erreur = "" : tout va bien
+               != "" si probleme
+info = la ou les lignes recherchees
+    """
+#
+    messages_erreur = { 0 : None,
+                       -1 : "La chaine est absente.",
+                        1 : "Ce fichier est inconnu." }
+#
+    nom_fonction = __name__ + "/post_aster_1"
+    blabla = "\nDans " + nom_fonction + " :"
+    if self.verbose_max :
+      print blabla, "nomfic =", nomfic, "chaine =", chaine, ", nuocc =", nuocc
+#
+    trouve = False
+    erreur = 0
+    message_erreur = " "
+    info = ""
+#
+    while not erreur :
+#
+# 1. Lecture du fichier
+#
+      if not os.path.isfile(nomfic) :
+        self.message_info += "\nFichier "+nomfic+"\n"
+        erreur = 1
+        break
+      fic = open (nomfic, "r")
+      les_lignes = fic.readlines()
+      fic.close()
+#
+# 2. Exploration des lignes
+# 2.1. On recupere tout
+#
+      if chaine == None :
+#
+        for ligne in les_lignes :
+          info += ligne
+#
+# 2.2. On cible
+#
+      else :
+#
+        iaux = 0
+        for ligne in les_lignes :
+          if chaine in ligne :
+            iaux += 1
+            if ( ( nuocc == 0 ) or ( iaux == nuocc ) ) :
+              info += ligne
+              if ( not trouve ) :
+                self.message_info += "\n"
+                trouve = True
+#
+      break
+#
+    if ( not trouve ) :
+      erreur = -1
+#
+    if ( self.verbose_max or ( erreur>0 ) ) :
+      print blabla, "nomfic =", nomfic, "chaine =", chaine, ", nuocc =", nuocc
+      print ". erreur =", erreur
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur, info
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def dump_resultat ( self ) :
+#
+    """
+Dump du resultat du calcul
+    """
+#
+    messages_erreur = { 0 : None }
+#
+    nom_fonction = __name__ + "/dump_resultat"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+# 1. Lancement
+#
+    nomfic_donn = os.path.join(self.rep_calc, "donn")
+    fic = open (nomfic_donn, "w")
+    fic.write("1\n1\n1\n")
+    fic.close()
+    fic_dump = self.dico["rmed"]+".dump"
+    commande = "mdump " + self.dico["rmed"] + "<" + nomfic_donn + ">" + fic_dump
+    #print commande
+    erreur = os.system(commande)
+    if erreur :
+      messages_erreur[erreur] = "Erreur de dump numero %d" % erreur
+    else :
+      self.message_info += "\nDump dans le fichier :\n"
+      self.message_info += fic_dump+"\n"
+#
+    if self.verbose_max :
+      print blabla
+      print ". erreur :", erreur
+#
+    os.remove(nomfic_donn)
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#
+if __name__ == "__main__" :
+#
+  #print "Arguments a l'entree de",  sys.argv[0], ":", sys.argv[1:], "\n"
+#
+  Script_A = Script(sys.argv[1:])
+#
+  if Script_A.affiche_aide_globale :
+    Script_A.message_info = Script_A.__doc__
+    erreur_m = 0
+    message_erreur_m = ""
+  else :
+    dico_resu_m = {}
+    erreur_m, message_erreur_m, dico_resu_m = Script_A.compute ()
+#
+  sys.stdout.write(Script_A.message_info+"\n")
+  sys.stderr.write(message_erreur_m+"\n")
+  sys.exit(erreur_m)
diff --git a/doc/files/yacs_script_test.py b/doc/files/yacs_script_test.py
new file mode 100755 (executable)
index 0000000..74a4d08
--- /dev/null
@@ -0,0 +1,261 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+"""
+Pseudo-lancement d'un calcul pour valider les tests
+"""
+__revision__ = "V2.1"
+#
+import sys
+import os
+#
+class Script :
+#
+  """
+Mode d'emploi :
+==============
+yacs_script_test --rep_calc=rep_calc --mesh_file=mesh_file --num=nro [-h|-help] [-v] [-v_max]
+
+Arguments obligatoires :
+------------------------
+--rep_calc=rep_calc : le repertoire du calcul.
+--mesh_file=mesh_file : le fichier contenant le maillage sur lequel on veut calculer. Le nom est absolu ou relatif par rapport au repertoire de calcul ou a $HOME.
+--num=nro : le numero du calcul, depuis 0.
+
+Exemples :
+----------
+./yacs_script_test.py --rep_calc=`pwd` --mesh_file=maill.00.med --num=0
+  """
+#
+#====
+# 0. Les defauts
+#====
+#
+  affiche_aide_globale = 0
+  verbose = 0
+  verbose_max = 0
+#
+  message_info = "\n"
+#
+#
+#========================= Debut de la fonction ==================================
+#
+  def __init__ ( self, liste_arg ) :
+#
+    """
+Le constructeur de la classe Script
+    """
+#
+# 1. Decodage des arguments
+#
+    self.rep_calc = None
+    self.numero = None
+    self.mesh_file = None
+#
+    for argu in liste_arg :
+#
+      #print argu
+      l_aux = argu.split("=")
+      #print l_aux
+      if len(l_aux) == 2 :
+        #print l_aux[0]
+        #print l_aux[1]
+        if l_aux[0] == "--rep_calc" :
+          self.rep_calc = l_aux[1]
+        elif l_aux[0] == "--num" :
+          self.numero = int(l_aux[1])
+        elif l_aux[0] == "--mesh_file" :
+          self.mesh_file = l_aux[1]
+      else :
+        saux = argu.upper()
+        if saux in ( "-H", "-HELP" ) :
+          self.affiche_aide_globale = 1
+        elif saux == "-V" :
+          self.verbose = 1
+        elif saux in ( "-V_MAX", "-VMAX" ) :
+          self.verbose = 1
+          self.verbose_max = 1
+#
+# 2. Les paramètres de base
+#
+    self.dico = {}
+#
+    if self.verbose_max :
+      nom_fonction = __name__ + "/__init__"
+      print "\nDans " + nom_fonction + ","
+      print ". rep_calc       :", self.rep_calc
+      print ". mesh_file      :", self.mesh_file
+      print ". numero         :", self.numero
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def compute ( self ) :
+#
+    """
+Lancement d'un calcul
+    """
+#
+    nom_fonction = __name__ + "/compute"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    dico_resu = {}
+#
+    while not erreur :
+#
+# 1. Controles des arguments
+#
+      #print "\n==== self.controle_argument () ===="
+      erreur, message_erreur = self.controle_argument()
+      if erreur :
+        break
+#
+# 2. Pseudo-Calcul
+#
+      #print "\n==== self.calcul () ===="
+      dico_resu["FileName"] = self.mesh_file
+      dico_resu["V_TEST"] = 1./float(self.numero+1)
+#
+      break
+#
+    if self.verbose_max :
+      print blabla
+      print ". erreur :", erreur
+#
+    return erreur, message_erreur, dico_resu
+#
+#=========================  Fin de la fonction ===================================
+#
+#========================= Debut de la fonction ==================================
+#
+  def controle_argument ( self ) :
+#
+    """
+Controle les arguments et stockage de quelques informations
+    """
+#
+    messages_erreur = { 0 : None,
+                       -1 : "Quel repertoire de calcul ?",
+                       -3 : "Quel fichier de maillage ?",
+                       -4 : "Ce repertoire est inconnu.",
+                       -5 : "Ce fichier est inconnu.",
+                       -9 : "Quel numero de calcul ?" }
+#
+    nom_fonction = __name__ + "/controle_argument"
+    blabla = "\nDans " + nom_fonction + ","
+#
+    erreur = 0
+    message_erreur = " "
+#
+    if self.verbose_max :
+      print blabla
+      print ". rep_calc       :", self.rep_calc
+      print ". mesh_file      :", self.mesh_file
+      print ". numero         :", self.numero
+#
+    while not erreur :
+#
+# 1. Les repertoire et fichier
+# 1.1. Il y a bien eu une donnee
+#
+      if self.rep_calc == None :
+        erreur = -1
+      elif self.mesh_file == None :
+        erreur = -3
+      if erreur < 0 :
+        self.message_info += "Relancer avec -h pour avoir le mode d'emploi."
+        break
+#
+# 1.2. Le repertoire de calcul
+#
+      if os.environ.has_key("HOME") :
+        HOME = os.environ ["HOME"]
+      else :
+        HOME = "/local/home/salome"
+#
+      if ( self.rep_calc[:1] == "~" ) :
+        self.rep_calc = os.path.join(HOME, self.rep_calc[2:])
+      if not os.path.isdir(self.rep_calc) :
+        self.message_info += "Repertoire " + self.rep_calc
+        erreur = -4
+        break
+      else :
+        aux = os.path.join(os.getcwd(), self.rep_calc)
+        self.rep_calc = os.path.normpath(aux)
+#
+# 1.3. Les fichiers
+#
+      fic = self.mesh_file
+#
+      if ( fic[:1] == "~" ) :
+        fic = os.path.join(HOME, fic[2:])
+      if not os.path.isfile(fic) :
+        aux = os.path.join(self.rep_calc, fic)
+        if not os.path.isfile(aux) :
+          self.message_info += "Fichier : " + fic
+          erreur = -5
+          break
+        else :
+          fic = os.path.normpath(aux)
+      aux = os.path.join(os.getcwd(), fic)
+#
+      self.mesh_file = os.path.normpath(aux)
+#
+# 2. Le numero du calcul
+#
+      if self.numero == None :
+        erreur = -9
+#
+      break
+#
+    if erreur :
+      message_erreur = messages_erreur[erreur]
+#
+    if self.verbose_max :
+      print ". rep_calc  :", self.rep_calc
+      print ". mesh_file :", self.mesh_file
+#
+    return erreur, message_erreur
+#
+#=========================  Fin de la fonction ===================================
+#
+#
+if __name__ == "__main__" :
+#
+  #print "Arguments a l'entree de",  sys.argv[0], ":", sys.argv[1:], "\n"
+#
+  Script_A = Script(sys.argv[1:])
+#
+  if Script_A.affiche_aide_globale :
+    Script_A.message_info = Script_A.__doc__
+    erreur_m = 0
+    message_erreur_m = ""
+  else :
+    dico_resu_m = {}
+    erreur_m, message_erreur_m, dico_resu_m = Script_A.compute ()
+#
+  sys.stdout.write(Script_A.message_info+"\n")
+  sys.stderr.write(message_erreur_m+"\n")
+  sys.exit(erreur_m)
diff --git a/doc/fr/CMakeLists.txt b/doc/fr/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..34ef842
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SALOME_CONFIGURE_FILE(conf.py.in conf.py)
+
+SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html ${CMAKE_CURRENT_SOURCE_DIR} html)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}")            
+
+ADD_CUSTOM_TARGET(html_docs_fr COMMAND ${_cmd})
+
+INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target html_docs_fr)")
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ DESTINATION ${SALOME_INSTALL_DOC}/gui/HOMARD/fr)
+
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES html)
diff --git a/doc/fr/conf.py.in b/doc/fr/conf.py.in
new file mode 100644 (file)
index 0000000..a0cb621
--- /dev/null
@@ -0,0 +1,204 @@
+# -*- coding: utf-8 -*-
+#
+# HOMARD documentation build configuration file, created by
+# sphinx-quickstart on Tue Jan  5 08:51:14 2010.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',  'sphinx.ext.coverage',  'sphinx.ext.ifconfig']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'HOMARD'
+copyright = u'1996, 2011, 2017, EDF R&D, G. Nicolas, T. Fouquet, P. Noyret'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '@SALOMEHOMARD_VERSION@'
+# The full version, including alpha/beta/rc tags.
+release = '@SALOMEHOMARD_VERSION@'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'fr'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['_build','ref','images','CVS','.svn']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = '@SPHINX_THEME@'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = None
+#html_logo = "../images/HOMARD.png"
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+html_favicon = None
+#html_favicon = "../images/homard_d.ico"
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_domain_indices = True
+
+# If false, no index is generated.
+html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+html_copy_source = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'HOMARDdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# Paper size option of the document class ('a4paper' or 'letterpaper'), default 'letterpaper'.
+paper_size = 'a4paper'
+
+# Point size option of the document class ('10pt', '11pt' or '12pt'), default '10pt'.
+pointsize = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'HOMARD.tex', u'HOMARD Documentation',
+   u'G. NICOLAS et T. FOUQUET', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+latex_logo = None
+#latex_logo = "../images/HOMARD.png"
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+latex_use_modindex = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/doc/fr/demarrage_rapide.rst b/doc/fr/demarrage_rapide.rst
new file mode 100644 (file)
index 0000000..941a4f5
--- /dev/null
@@ -0,0 +1,116 @@
+.. _demarrage_rapide:
+
+Démarrage rapide
+################
+.. index:: single: démarrage
+.. index:: single: exemple
+
+L'ensemble des options de pilotage du module HOMARD dans SALOME est décrit dans le :doc:`gui_usage`. Mais on trouvera ici le B.A. BA pour découvrir l'utilisation de HOMARD à partir d'un exemple simple.
+
+Imaginons que l'on a effectué un calcul de thermique sur un maillage donné. On a récupéré en sortie de ce calcul un fichier au format MED, contenant le maillage et le champ des températures aux noeuds. On aimerait adapter le maillage de telle sorte que l'écart de température entre deux noeuds voisins soit inférieur à une valeur donnée.
+
+La première action nécessite de lancer le module HOMARD, en créant une nouvelle étude, selon le principe qui a été retenu pour tous les autres modules de SALOME.
+
+.. image:: images/homard_1.png
+   :align: center
+   :alt: HOMARD - lancement
+   :width: 560
+   :height: 150
+
+Une fois le module HOMARD activé, on crée un cas par le choix "*Nouveau cas*" dans le menu HOMARD.
+
+.. image:: images/homard_2.png
+   :align: center
+   :alt: Nouveau cas
+   :width: 463
+   :height: 150
+
+La fenêtre suivante apparaît :
+
+.. image:: images/intro_31.png
+   :align: center
+   :alt: Fenetre
+   :width: 554
+   :height: 298
+
+Il faut fournir deux informations : le répertoire qui contiendra les fichiers produits par les adaptations successives et le fichier MED issu du calcul que l'on vient de faire. Dans ce cas, on laissera les options par défaut de conformité du maillage et de non prise en compte de frontières courbes. On valide par "Appliquer et fermer".
+
+.. image:: images/intro_32.png
+   :align: center
+   :alt: Fenetre - 2
+   :width: 554
+   :height: 298
+
+L'arbre d'études est enrichi de ce cas. On déplie le cas jusqu'à afficher le maillage correspondant à l'itération 0. On désigne cette itération initiale et on demande une nouvelle itération par "*Nouvelle itération*" dans le menu HOMARD ou à la souris.
+
+.. image:: images/intro_331.png
+   :align: center
+   :alt: Nouvelle itération
+   :width: 357
+   :height: 327
+
+La fenêtre suivante apparaît :
+
+.. image:: images/intro_33.png
+   :align: center
+   :alt: Nouvelle itération - 2
+   :width: 649
+   :height: 372
+
+On désigne le fichier issu du calcul que l'on vient de faire et qui contient le champ de température. C'est le même que celui qui a été donné dans la définition du cas.
+
+.. image:: images/intro_34.png
+   :align: center
+   :alt: Fenetre
+   :width: 624
+   :height: 103
+
+On clique sur "Nouveau" dans la rubrique hypothèse. La fenêtre suivante apparaît :
+
+.. image:: images/intro_35.png
+   :align: center
+   :alt: Fenetre
+   :width: 769
+   :height: 775
+
+On modifie les options par défaut pour correspondre à notre choix de pilotage de l'adaptation. La sélection d'un pilotage par les sauts entre éléments et d'un seuil absolu de 4.0 va demander le découpage de chaque arête de maille où le température varie de plus de 4.0 degrés entre les deux extrémités de l'arête.
+
+.. image:: images/intro_36.png
+   :align: center
+   :alt: Fenetre
+   :width: 719
+   :height: 229
+
+On valide par "Appliquer et fermer" cette création d'hypothèse, puis la création de la nouvelle itération. On se retrouve avec un arbre d'études enrichi avec la description de l'hypothèse créée et de l'itération à calculer, repérée par une icone "en attente".
+
+Lancer l'adaptation s'obtient en sélectionnant l'itération à calculer. On choisit ensuite "*Calculer*" dans le menu HOMARD ou à la souris. L'arbre d'études s'enrichit de fichiers d'informations et du nom du fichier au format MED qui contient le nouveau maillage, ``maill.01.med``. On remarque qu'il est placé dans le répertoire qui a été désigné à la création du cas.
+
+.. image:: images/intro_37.png
+   :align: center
+   :alt: Fenetre
+
+A ce stade, on va utiliser ce nouveau maillage pour un deuxième calcul, dans les mêmes conditions que le premier. Une fois que ce nouveau calcul est achevé, on peut décider de poursuivre le processus d'adaptation. Pour cela on revient dans SALOME et on active le module HOMARD. On désigne l'itération que l'avait calculée précédemment "*Iter_1*" et on demande une nouvelle itération. La fenêtre suivante apparaît :
+
+.. image:: images/intro_38.png
+   :align: center
+   :alt: Fenetre
+
+Comme on continue l'adaptation avec le même critère de saut de température entre noeuds voisins, on garde l'hypothèse "*Hypo_1*". Il suffit de désigner le fichier issu du calcul que l'on vient de faire et qui contient le nouveau champ de température.
+
+.. image:: images/intro_39.png
+   :align: center
+   :alt: Fenetre
+
+Comme précédemment, on lance l'adaptation et on récupère les résultats dans le répertoire du cas, dont le maillage ``maill.02.med``.
+
+.. image:: ../images/intro_40.png
+   :align: center
+   :alt: Fenetre
+
+On peut alors lancer un nouveau calcul sur ce nouveau maillage et poursuiver cette alternance calcul/adaptation jusqu'à l'obtention du résultat attendu.
+
+
+
+
+
+
diff --git a/doc/fr/divers.rst b/doc/fr/divers.rst
new file mode 100644 (file)
index 0000000..cd827a1
--- /dev/null
@@ -0,0 +1,84 @@
+.. _divers:
+
+Divers
+######
+
+Références
+**********
+.. index:: single: référence
+
+Pour une référence à HOMARD, utiliser :
+
+G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, "*Finite Elements in Analysis and Design*", Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+`Accessible en cliquant ici <http://dx.doi.org/10.1016/j.finel.2012.11.008>`_
+
+D'autres références sont disponibles sur le site de `HOMARD <http://www.code-aster.org/outils/homard/fr/divers.html>`_
+
+Evolutions du module
+********************
+.. index:: single: évolution
+
+On trouvera ici les principales évolutions de HOMARD à partir de la première version livrée dans SALOME 6.5.
+
+SALOME VERSION 6.6 :
+    - Interfaçage avec med 3.0.6
+    - Valeurs par défaut des instants
+    - Acceptation des mailles de type TRIA7 et QUAD9
+    - Option de sortie dans le fichier MED du niveau de raffinement atteint dans chaque maille
+
+SALOME VERSION 7.1 :
+    - Correction d'une anomalie sur le filtrage du raffinement par les groupes
+    - Pilotage de l'adaptation par un seuil basé sur la moyenne et l'écart-type (voir :ref:`tui_create_hypothese`)
+    - En TUI, choix du dernier instant comme instant de pilotage par SetTimeStepRankLast (voir :ref:`tui_create_iteration`)
+    - Possibilité de détruire les objets (GUI et TUI)
+    - Modification des fonctions TUI pour qu'elles agissent sur les objets et non plus sur les noms :
+      ``homard.AssociateIterHypo(iter_name,hypo_name)`` devient ``iter.AssociateHypo(hypo_name)``, ``homard.AssociateHypoZone(hypo_name,zone_name,type_use)`` devient ``hypo.AddZone(zone_name,type_use)``, ``homard.CreateIteration(iter_name,iter_parent_name)`` devient ``case.NextIteration(iter_name)`` ou ``iter.NextIteration(iter_name)``
+    - Ajout de fonctions :
+      ``cas.LastIteration()`` : retourne la dernière itération de la descendance du cas (voir :ref:`tui_create_iteration`)
+    - Analyse de maillages (voir :ref:`gui_mesh_info`)
+
+SALOME VERSION 7.2 :
+    - Possibilité d'utiliser un cone comme support de frontiere 2D (voir :ref:`tui_create_boundary`)
+    - Choix de publier ou non le résultat dans SMESH (voir :ref:`tui_create_iteration`)
+      ``iter.Compute(option)`` devient ``iter.Compute(option1, option2)``
+    - Possibilité de poursuivre une suite d'itérations archivées dans un répertoire (voir :ref:`gui_create_case`)
+
+SALOME VERSION 7.3 :
+    - Documentation en anglais
+    - Options pour suivre le calcul de l'itération (voir :ref:`tui_create_iteration`) : ``iter.SetInfoCompute(MessInfo)``
+    - Creation automatique de schéma YACS :
+      ``case.WriteYACSSchema(ScriptFile, DirName, MeshFile)`` : écrit un schéma YACS correspondant au cas (voir :ref:`tui_create_case`)
+    - Le maillage initial n'est pas publié dans SMESH.
+    - Le raffinement de maillages 2D avec des quadrangles est amélioré pour prendre en compte des zones 'en escalier'.
+    - Les champs constants par mailles peuvent être interpolés selon les deux modes : intensif ou extensif.
+    - Possibilité de choix des pas de temps pour l'interpolation des champs :
+      ``SetFieldInterpTimeStep(FieldInterp, TimeStep)`` : interpole le champ au pas de temps TimeStep (voir :ref:`tui_create_iteration`)
+      ``SetFieldInterpTimeStepRank(FieldInterp, TimeStep, Rank)`` : interpole le champ au pas de temps TimeStep et au numéro d'ordre Rank (voir :ref:`tui_create_iteration`)
+    - Arrêt en cas d'erreur dans les données des instructions python
+
+SALOME VERSION 7.4 :
+    - Grandes fenêtres avec ascenseur.
+    - Publication des maillages à la demande.
+    - Suivi de frontière analytique torique.
+    - La fonction ``SetAdapRefinUnRef(TypeAdap, TypeRaff, TypeDera)`` est supprimée. Pour une adaptation selon un champ ou des zones, le mode raffinement/déraffinement est automatiquement déduit des autres paramètres de l'hypothèse. Pour un raffinement uniforme, on utilisera ``SetUnifRefinUnRef(TypeRaffDera)`` (voir :ref:`tui_create_hypothese`).
+    - En cas d'erreur dans l'adaptation, le nom du fichier de messages est affiché.
+    - Passage à la version 11.1 de l'exécutable HOMARD ; le raffinement conforme des maillages en hexaèdres est amélioré pour diminuer le nombre de mailles produites.
+
+SALOME VERSION 7.5 :
+    - Sorties supplémentaires optionnelles : diamètre et qualité ; on utilisera ``SetExtraOutput(option)`` (voir :ref:`tui_create_hypothese`).
+    - Passage à la version 11.2 de l'exécutable HOMARD ; amélioration du suivi des frontières courbes 1D.
+
+SALOME VERSION 7.6 :
+    - Pilotage de l’interpolation de tous les champs présents dans le fichier d’entrée.
+
+SALOME VERSION 8.1 :
+    - Interfaçage avec med 3.2.0
+    - Variantes dans les choix conforme / non conforme.
+    - Diminution du nombre de mailles impactées dans le cas d’un raffinement non conforme d’un maillage en hexaèdres.
+    - Correction d'une anomalie en raffinement / déraffinement d’un maillage en hexaèdres.
+
+SALOME VERSION 8.3 :
+    - Interfaçage avec med 3.2.1
+    - Sortie des listes de mailles volumiques raccordées par non-conformité
+
diff --git a/doc/fr/glossaire.rst b/doc/fr/glossaire.rst
new file mode 100644 (file)
index 0000000..7afec02
--- /dev/null
@@ -0,0 +1,38 @@
+.. _glossaire:
+
+Glossaire
+#########
+
+.. glossary::
+   :sorted:
+
+   raffinement
+      Le raffinement est une opération consistant à découper les mailles sélectionnées.
+
+   niveau
+      Le niveau d'une maille est le nombre de découpages qu'il a fallu pour l'obtenir. Les mailles du maillage initial sont du niveau 0 par convention.
+
+   déraffinement
+      Le déraffinement est une opération consistant à supprimer des mailles. Il s'agit en fait d'annuler un précédent découpage : on ne reviendra jamais 'plus haut' que le maillage initial.
+
+   zone
+      Une zone est une région qui définit un mode de pilotage de l'adaptation : toutes les mailles dont au moins une arête est dans une zone seront raffinées ou déraffinées selon le choix retenu.
+
+   cas
+      Un cas est défini par un maillage initial et une succession d'adaptations.
+
+   indicateur d'erreur
+      L'indicateur d'erreur est un champ exprimé sur les mailles du calcul. Il représente l'écart entre la solution réelle et la solution calculée.
+
+   itération
+      Une itération est le processus qui permet de passer d'un maillage à un autre au sein d'un cas. Une itération met en oeuvre du raffinement et/ou du déraffinement selon l'hypothèse qui lui est attachée.
+
+   hypothèse
+      Une hypothèse décrit les conditions de passage d'un maillage à un autre : raffinement et/ou déraffinement, mode de pilotage, etc. Une hypothèse est référencée par une ou plusieurs itérations.
+
+   champ
+      Un champ est exprimé sur un maillage, par noeud ou par maille, avec une ou plusieurs composantes. La valeur de ce champ pilote l'adaptation.
+
+
+   MED
+      C'est le format d'échange des maillages et des champs pour SALOME.
\ No newline at end of file
diff --git a/doc/fr/gui_create_boundary.rst b/doc/fr/gui_create_boundary.rst
new file mode 100644 (file)
index 0000000..f2cb2bc
--- /dev/null
@@ -0,0 +1,143 @@
+.. _gui_create_boundary:
+
+La frontière
+############
+.. index:: single: boundary
+.. index:: single: frontière
+
+L'objet frontière contient toutes les définitions géométriques permettant de décrire une frontière courbe à suivre.
+
+Il existe deux modes de description d'une frontière :
+
+  - Discrète : ce mode est utilisé pour décrire une courbe 1D
+  - Analytique : ce mode est utilisé pour décrire une surface
+
+
+Frontière discrète
+******************
+
+Le suivi d'une frontière discrète se fera en sélectionnant une frontière choisie dans la liste des frontières discrètes existantes.
+
+Au démarrage, la liste est vide. Il faut créer une première frontière discrète par activation du bouton "*Nouveau*" :
+
+.. image:: images/create_boundary_di_1.png
+   :align: center
+
+La fenêtre proposée invite au choix d'un fichier de maillage. Ce maillage est celui de toutes les lignes constituant la frontière. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
+
+.. image:: images/create_boundary_di_2.png
+   :align: center
+
+.. note::
+  Le fichier ne doit contenir qu'un seul maillage.
+
+Si des frontières discrètes ont déjà été définies pour un autre cas, on peut sélectionner l'une d'elles. On peut également créer une nouvelle frontière discrète par activation du bouton "*Nouveau*", comme expliqué précédemment.
+
+.. image:: images/create_boundary_di_3.png
+   :align: center
+
+
+
+Frontière analytique
+********************
+Au démarrage, SALOME affiche un tableau avec un seule colonne. Cette colonne contient la liste de tous les groupes du maillage initial définissant le cas.
+
+.. image:: images/create_boundary_an_1.png
+   :align: center
+
+Il faut créer une première frontière analytique par activation du bouton "*Nouveau*". On aura le choix entre cylindre, sphère, cône ou tore. Une fois que la frontière sera validée, son nom figurera en en-tête d'une deuxième colonne.
+
+.. image:: images/create_boundary_an_2.png
+   :align: center
+
+Il faut maintenant établir le lien entre le maillage définissant le cas et cette frontière décrite analytiquement. Cela se fait en cochant les groupes des faces qui doivent se trouver sur la frontière.
+
+.. image:: images/create_boundary_an_3.png
+   :align: center
+
+Cette opération est répétée autant de fois que l'on souhaite placer des faces du maillages sur une surface courbe :
+
+.. image:: images/create_boundary_an_4.png
+   :align: center
+
+.. note::
+
+  Un groupe peut très bien ne jamais être coché : cela signifie que les mailles qu'il définit n'appartiennent à aucune des frontières décrites.
+
+  Un groupe ne peut être coché qu'une seule fois. En effet, des mailles surfaciques ne peuvent pas appartenir à plus d'une surface.
+
+  Plusieurs groupes peuvent être cochés pour une même frontière. Cela arrive quand le maillage initial de la zone a été subdivisé en plusieurs groupes : toutes les mailles surfaciques appartiennent à cette surface mais ont été réparties en plusieurs groupes.
+
+  Inversement, une frontière peut très bien n'être retenue par aucun groupe. Cela arrive si elle a été définie pour un cas précédent et qu'elle est sans objet pour le cas en cours de définition.
+
+
+Il existe quatre types de frontière analytique :
+
+  - Cylindre
+  - Sphère
+  - Cône, décrit par un axe et un angle ou par deux rayons
+  - Tore
+
+.. note::
+  Les valeurs numériques proposées par défaut tiennent compte de la géométrie du maillage.
+
+
+Un cylindre
+===========
+.. index:: single: cylindre
+
+Le cylindre est défini par un point de l'axe, son axe et son rayon. L'axe est défini par un vecteur. La norme de ce vecteur n'est pas nécessairement égale à 1 ; de même, son orientation n'a aucune importance. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
+
+.. image:: images/create_boundary_an_cy.png
+   :align: center
+
+Une sphère
+==========
+.. index:: single: sphere
+
+La sphère est définie par son centre et son rayon. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
+
+.. image:: images/create_boundary_an_sp.png
+   :align: center
+
+Un cône
+=======
+.. index:: single: cone
+
+Un cône est défini de deux manières différentes : le centre, l'axe et l'angle d'ouverture en degré ou par deux points centrés sur l'axe et le rayon associé. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
+
+Création par une origine, un axe et un angle d'ouverture :
+
+.. image:: images/create_boundary_an_co_1.png
+   :align: center
+
+Création par deux points centrés sur l'axe et le rayon associé :
+
+.. image:: images/create_boundary_an_co_2.png
+   :align: center
+
+Un tore
+=======
+.. index:: single: tore
+
+Le tore est défini par son centre, son axe, le rayon de révolution et le rayon primaire. L'axe est défini par un vecteur. La norme de ce vecteur n'est pas nécessairement égale à 1 ; de même, son orientation n'a aucune importance. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
+
+.. image:: images/create_boundary_an_to.png
+   :align: center
+
+L'arbre d'étude
+***************
+.. index:: single: arbre d'étude
+
+A l'issue de cette création de frontières, l'arbre d'études a été enrichi. On y trouve toutes les frontières créées, identifiées par leur nom, avec la possibilité de les éditer.
+
+.. image:: images/create_boundary_1.png
+   :align: center
+
+
+Méthodes python correspondantes
+*******************************
+Consulter : :doc:`tui_create_boundary`
+
+
+
diff --git a/doc/fr/gui_create_case.rst b/doc/fr/gui_create_case.rst
new file mode 100644 (file)
index 0000000..0e41fc2
--- /dev/null
@@ -0,0 +1,185 @@
+.. _gui_create_case:
+
+La création d'un cas
+####################
+.. index:: single: cas
+
+La définition du cas se fait par la donnée des informations suivantes :
+
+  - Un nom
+  - Un répertoire
+  - Le fichier du maillage initial
+  - Le type de conformité pour la série d'adaptations envisagées
+  - Les éventuelles frontières courbes à respecter
+
+.. image:: images/intro_32.png
+   :align: center
+
+
+Le nom du cas
+*************
+Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas.
+
+Le répertoire
+*************
+Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. Par défaut, rien n'est proposé. Le choix est fait, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement. Ces fichiers seront visibles dans l'arbre d'études.
+
+.. image:: images/create_case_2.png
+   :align: center
+
+.. index:: single: maillage;initial
+.. index:: single: MED
+
+Le maillage initial
+*******************
+Le maillage initial doit se trouver dans un fichier au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Mais il peut également avoir été créé avec le module SMESH et exporté au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
+
+.. image:: images/create_case_3.png
+   :align: center
+
+.. note::
+  Le fichier ne doit contenir qu'un seul maillage.
+
+.. warning::
+  Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre la cohérence entre les différents niveaux de raffinement/déraffinement
+
+.. index:: single: type de conformité
+
+Le type de conformité
+*********************
+Les itérations qui seront calculées pour ce cas devront toutes respecter le même comportement vis-à-vis de la conformité.
+
+L'option par défaut, 'conforme', implique que les maillages produits par HOMARD seront conformes au sens des éléments finis. C'est le choix classique de la plupart des logiciels de simulation par éléments finis.
+
+Il est possible également de traiter des maillages non conformes.
+
+.. image:: images/create_case_4.png
+   :align: center
+
+Des variantes peuvent être obtenues avec les options avancées.
+
+.. index:: single: frontière
+
+Les frontières courbes
+**********************
+Quand le bord du domaine est courbe, HOMARD sait placer les nouveaux noeuds sur ces frontières pour éviter des singularités artificielles. Cette technique est aussi applicable à une courbure intérieure à un domaine.
+
+Deux cas de figure sont présents :
+
+* courbe 1D : cette courbe peut être définie dans un plan, par exemple pour un calcul 2D. Elle peut également être définie dans l'espace 3D, par exemple pour l'intersection de deux surfaces. Une ligne à suivre est décrite de manière discrète.
+* surface : une surface à suivre est décrite de manière analytique.
+
+On cochera le ou les boutons voulus :
+
+.. image:: images/create_case_5.png
+   :align: center
+
+La définition des frontières est décrite dans :doc:`gui_create_boundary`.
+
+.. index:: single: pyramide
+
+.. _options_avancees:
+
+Les options avancées
+********************
+Par défaut, aucune option avancée n'est active. Néanmoins, on peut définir quelques options avancées.
+
+Les pyramides
+=============
+
+La première concerne la gestion des mailles pyramidales.
+
+.. image:: images/create_case_7.png
+   :align: center
+
+Par défaut, HOMARD sait traiter des maillages en 2 ou 3 dimensions et comportant les mailles suivantes :
+   - mailles-points
+   - segments
+   - triangles
+   - quadrangles
+   - tétraèdres
+   - hexaèdres
+   - prismes
+
+Si le maillage initial comporte des pyramides, il y a arrêt en erreur. Toutefois, si on est certain que les raffinements ultérieurs ne toucheront aucune des arêtes des pyramides, on cochera la case "Pyramides autorisées". Les adaptations se dérouleront normalement et les pyramides seront restituées telles quelles dans le maillage final.
+
+Quelle conformité ?
+===================
+
+Pour un raffinement conforme, on a le choix entre le raffinement conforme standard, option par défaut, ou un raffinement par boîte, c'est-à-dire interdisant le raffinement en escalier.
+
+.. image:: images/create_case_8.png
+   :align: center
+
+Quelle non-conformité ?
+=======================
+
+Pour un raffinement non conforme, on a le choix entre 4 possibilités :
+* raffinement conforme standard, option par défaut
+* raffinement par boîte, c'est-à-dire interdisant le raffinement en escalier
+* 1 noeud par arête : chaque arête d'une maille peut être découpée sans que la maille voisine par cette arête ne le soit.
+* quelconque : aucune limitation sur les raccords de conformité d'une maille à l'autre.
+
+.. image:: images/create_case_9.png
+   :align: center
+
+Le format externe
+=================
+.. index:: single: MED
+.. index:: single: Saturne
+
+Par défaut le format des mailles externes est le format MED. Dans le cas d'un calcul Saturne 2D, on doit le préciser ici pour gérer correctement le caractère pseudo-2D du maillage.
+
+.. image:: ../images/create_case_1.png
+   :align: center
+
+La poursuite d'un cas
+*********************
+.. index:: single: poursuite
+.. index:: single: YACS
+
+La poursuite d'un cas correspond à la situation suivante :
+Une série d'adaptations ont été conduites sur un cas puis SALOME est fermé. On a gardé les répertoires de travail de ces itérations. On souhaite ensuite reprendre ces itérations pour les poursuivre là où on s'est arrêté. Cette fonctionnalité est particulièrement utile dans le cas de schémas YACS pour lesquels on scinde en plusieurs parties une longue série d'adaptations.
+
+La condition pour reprendre une itération est d'avoir conservé dans un même répertoire deux fichiers :
+   - le fichier de configuration qui a servi de données au module exécutable de HOMARD ; ce fichier se présente sous la forme ``HOMARD.Configuration.(n).vers.(n+1)``
+   - le fichier au format MED qui conserve l'historique des adaptations réalisées ; ce fichier se présente sous la forme ``maill.(n).hom.med``
+
+On peut choisir de partir d'une itération archivée désignée explicitement par son répertoire ou d'une itération repérée dans le répertoire archivant un cas.
+
+Pour poursuivre une itération connue par son répertoire d'archive, la définition du cas se fait par la donnée des informations suivantes :
+
+  - Un nom
+  - Un répertoire
+  - Le répertoire qui contient les archives
+
+.. image:: images/pursue_case_1.png
+   :align: center
+
+On peut choisir de partir d'un cas déjà calculé ; par défaut, le nouveau cas sera créé en partant de la dernière itération précédemment calculée.
+
+.. image:: images/pursue_case_2.png
+   :align: center
+
+Si on souhaite partir d'une itération qui ne soit pas la dernière, il suffit de le préciser :
+
+.. image:: images/pursue_case_3.png
+   :align: center
+
+.. note::
+  Les paramétrages du cas ainsi créé sont ceux de l'itération poursuivie : mode de conformité identique par exemple.
+
+
+L'arbre d'étude
+***************
+A l'issue de cette création de cas, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni.
+
+.. image:: images/create_case_6.png
+   :align: center
+
+
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_case`
+
diff --git a/doc/fr/gui_create_hypothese.rst b/doc/fr/gui_create_hypothese.rst
new file mode 100644 (file)
index 0000000..82772e8
--- /dev/null
@@ -0,0 +1,143 @@
+.. _gui_create_hypothese:
+
+L'hypothèse
+###########
+.. index:: single: hypothèse
+
+L'hypothèse contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée.
+
+Il existe trois classes d'hypothèses :
+
+  - Uniforme sur tout le maillage,
+  - Selon un champ,
+  - En fonction de zone géométrique.
+
+.. image:: images/create_hypothese_1.png
+   :align: center
+
+
+Nom de l'hypothèse
+******************
+Un nom d'hypothèse est proposé automatiquement : Hypo_1, Hypo_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une hypothèse précédente.
+
+Adaptation uniforme
+*******************
+Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites.
+
+Adaptation selon un champ
+*************************
+
+.. note::
+  Pour pouvoir adapter le maillage selon un champ il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :doc:`gui_create_iteration`). Le nom du fichier qui a été sélectionné est affiché sans modification possible ici :
+
+.. image:: images/create_hypothese_ch_1.png
+   :align: center
+
+Le champ voulu est à choisir dans la liste des champs contenus dans le fichier.
+Une fois ce champ choisi, la liste des ses composantes s'affiche. Il suffit de désigner la (ou les) composantes désirées.
+
+Si l'on choisit une seule composante, par défaut, c'est sa valeur absolue qui sera utilisée, mais il est possible d'utiliser la valeur relative. Dans le cas de plusieurs composantes, par défaut HOMARD utilisera la norme L2 (euclidienne). On peut toutefois choisir d'utiliser la norme infinie (le max des valeurs absolues des composantes).
+
+On peut choisir de ne pas utiliser directement le champ, mais sa variation d'un élément à ses voisins. Pour cela, on activera le bouton "*Saut entre éléments*".
+
+.. image:: images/create_hypothese_ch_2.png
+   :align: center
+
+
+Le raffinement se fait selon un seuil qui définit un critère haut de raffinement. Toutes les mailles pour lesquelles l'indicateur est supérieur à ce critère seront raffinées.
+Pour le choix du critère, quatre variantes sont possible :
+
+  - selon un pourcentage de mailles à raffiner, nombre réel compris entre 0 et 100 ; HOMARD raffinera les x% des mailles qui ont la plus grande valeur du champ.
+  - selon une valeur relative du champ, nombre compris entre 0 et 100 ; HOMARD raffinera les mailles où le champ est supérieur à x% de l'intervalle [mini,maxi].
+  - au delà d'une valeur absolue ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées.
+  - au delà d'une valeur absolue valant la moyenne de la répartition du champ augmentée de n fois son écart-type ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées.
+
+La même convention s'applique au déraffinement, en remplaçant supérieur par inférieur. On peut inactiver une des fonctions (raffinement ou déraffinement) en cochant le bouton ad_hoc.
+
+.. image:: images/create_hypothese_ch_3.png
+   :align: center
+
+
+Adaptation selon une zone
+*************************
+.. index:: single: zone
+
+Au démarrage, il faut créer une première zone par activation du bouton "*Nouveau*" (voir :doc:`gui_create_zone`) :
+
+.. image:: images/create_hypothese_zo_1.png
+   :align: center
+
+Lorsque des zones ont déjà été créées, la liste apparaît dans la fenêtre, ce qui permet de sélectionner les zones voulues. On doit alors préciser si une zone est utilisée pour raffiner toutes les mailles dont une arête est contenue dans la zone, ou si la zone est utilisée pour déraffiner les mailles intérieures à la zone. Si aucun choix n'est fait, la zone est ignorée dans cette hypothèse.
+
+.. image:: images/create_hypothese_zo_2.png
+   :align: center
+
+
+Filtrage par les groupes
+************************
+.. index:: single: groupe
+
+On peut restreindre l'application de l'hypothèse d'adaptation à des groupes. Ainsi les mailles n'appartenant pas à ces groupes ne seront pas modifiées, sauf par contamination ultérieure du raffinement pour assurer la conformité du maillage final.
+On coche le bouton associé :
+
+.. image:: images/create_hypothese_gr_1.png
+   :align: center
+
+La liste des groupes de mailles présents dans le maillage est affichée. Il suffit de cocher ceux voulus pour restreindre l'hypothèse d'adaptation.
+
+.. image:: images/create_hypothese_gr_2.png
+   :align: center
+
+
+Interpolation de champs
+***********************
+.. index:: single: interpolation
+
+.. note::
+  Pour pouvoir interpoler un champ de l'ancien vers le nouveau maillage, il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :doc:`gui_create_iteration`).
+
+Par défaut, aucun champ n'est interpolé. A contrario, on peut demander l'interpolation de tous les champs présents dans le fichier fourni :
+
+.. image:: images/create_hypothese_ch_4.png
+   :align: center
+
+Si on veut choisir les champs à interpoler, il faut les cocher dans la liste de tous les champs présents dans le fichier fourni :
+
+.. image:: images/create_hypothese_ch_5.png
+   :align: center
+
+
+Les options avancées
+********************
+Si la case "Options avancées" n'est pas cochée, aucune contrainte supplémentaire n'est définie.
+Si la case est cochée, on définira les options avancées.
+
+Une première série d'options portent sur la finesse maximale de maillage que l'on ne veut pas dépasser. Deux directives sont possibles, séparément ou ensemble. On peut imposer une taille de maille minimale : une maille dont le diamètre est inférieur à cette limite ne sera plus découpée. Par défaut, on propose un diamètre minimal nul, ce qui revient à ne rien imposer. On peut imposer un niveau de raffinement maximal. Par défaut, le maximum est à 99, ce qui équivaut en général à ne rien imposer.
+
+La deuxième série d'options n'a d'intérêt que dans le cas où l'adaptation est piloté par un champ et que ce champ n'est pas défini partout dans le maillage. Cela arrive par exemple quand on construit un champ basé sur une distance dans un plan alors que le domaine est 3D : le champ ne sera pas défini sur les noeuds hors du plan. Pour de tels champs, cette option permet de préciser le comportement que l'on souhaite dans les régions où le champ n'est pas défini. Par défaut, il ne se passe rien : les mailles sont gardées telles quelles. On peut choisir les deux autres variantes : raffiner, toutes les mailles seront a priori coupées, ou déraffiner, toutes les mailles seront candidates au déraffinement.
+
+Le dernier choix porte sur des sorties supplémentaires de l'adaptation. Par défaut, aucune case n'est cochée et aucun champ n'est produit. Si l'une des cases est cochée, le fichier MED en sortie contiendra des champs supplémentaires.
+
+- Niveau de raffinement de chaque maille. La convention est celle de HOMARD : une maille du maillage initial est de niveau 0, une maille issue d'un raffinement d'une maille initiale porte le niveau 1, etc. Les mailles de transition qui sont produites entre deux mailles de niveau différents, n et n+1, sont affectées du demi-niveau n+0,5.
+- Qualité des mailles.
+- Diamètre des mailles.
+- Parents des mailles.
+- Voisinages des mailles de recollement pour un maillage non-conforme.
+
+.. image:: images/create_hypothese_av_1.png
+   :align: center
+
+L'arbre d'étude
+***************
+.. index:: single: arbre d'étude
+
+L'arbre d'études contient les hypothèses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente.
+
+.. image:: images/create_hypothese_2.png
+   :align: center
+
+
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_hypothese`
diff --git a/doc/fr/gui_create_iteration.rst b/doc/fr/gui_create_iteration.rst
new file mode 100644 (file)
index 0000000..e7d2c14
--- /dev/null
@@ -0,0 +1,82 @@
+.. _gui_create_iteration:
+
+L'itération
+###########
+.. index:: single: itération
+
+La définition d'une itération se fait par la donnée des informations suivantes :
+
+  - L'itération précédente
+  - Le nom du maillage résultat
+  - L'hypothèse utilisée
+  - Eventuellement, le fichier du champ d'indicateurs d'erreur
+
+.. image:: images/create_iteration_1.png
+   :align: center
+
+Le nom de l'itération
+*********************
+Un nom d'iteration est proposé automatiquement : Iter_1, Iter_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une itération précédente.
+
+L'itération précédente
+**********************
+L'itération précédente est choisie dans l'arbre d'étude. Le nom du maillage correspondant sera affiché.
+
+.. index:: single: maillage;résultat
+
+Le nom du maillage résultat
+***************************
+L'itération en cours de création produira un maillage. Ce maillage sera connu sous un nom. Ce nom est fourni en le tapant dans la zone de texte. Par défaut, on propose un nom identique à celui de l'itération précédente.
+
+.. index:: single: champ
+.. index:: single: MED
+
+Le champ
+********
+Pour créer ou utiliser une hypothèse d'adaptation basée sur un champ exprimé sur le maillage, on doit fournir le fichier où se trouve le champ. C'est également le cas si on veut interpoler des champs du maillage n au maillage n+1. Ce fichier est au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
+
+
+.. image:: images/create_iteration_2.png
+   :align: center
+
+Dans le cas où des pas de temps ont été définis, une solution simple consiste à traiter les champs au dernier pas de temps enregistré dans le fichier. Si on veut définir un autre pas de temps, on coche le bouton "*Pas de temps choisi*". Les valeurs de 'Pas de temps' et de 'Numéro d'ordre' sont celles correspondant à la convention MED (time step / rank). Ces valeurs dépendent de la logique qui a été retenue par le logiciel qui a écrit le fichier. Souvent ces deux valeurs sont identiques mais il arrive que l'on disjoigne les pas de temps et les intervalles d'archivage.
+
+.. image:: images/create_iteration_3.png
+   :align: center
+
+.. index:: single: hypothèse
+
+L'hypothèse utilisée
+********************
+L'itération en cours pilotera l'adaptation par HOMARD selon un scénario défini dans une hypothèse. Celle-ci est choisie dans la liste des hypothèses existantes.
+
+Au démarrage, il faut créer une première hypothèse par activation du bouton "*Nouveau*" (voir :doc:`gui_create_hypothese`) :
+
+.. image:: images/create_iteration_4.png
+   :align: center
+
+Ensuite, si une hypothèse précédemment définie convient, il suffit de la sélectionner dans la liste proposée. Sinon, il faut créer une nouvelle hypothèse par activation du bouton "*Nouveau*", puis la sélectionner dans la liste proposée :
+
+.. image:: images/create_iteration_5.png
+   :align: center
+
+.. note::
+  Si on envisage une adaptation selon les valeurs d'un champ sur le maillage, il faut avoir renseigné les informations sur ce champ avant de créer une nouvelle hypothèse.
+
+L'arbre d'étude
+***************
+.. index:: single: arbre d'étude
+
+A l'issue de cette création d'itération, l'arbre d'études a été enrichi. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, l'itération courante, identifiée par son nom. On trouve aussi l'hypothèse qui lui est attachée. L'icône en regard de l'itération permet de différencier les itérations calculées ou non.
+
+.. image:: images/create_iteration_6.png
+   :align: center
+
+Quand plusieurs itérations s'enchaînent, leur hypothèse est visible dans l'arbre d'étude. On remarquera dans la figure ci-après que deux itérations peuvent partager la même hypothèse.
+
+.. image:: images/create_iteration_7.png
+   :align: center
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_iteration`
diff --git a/doc/fr/gui_create_yacs.rst b/doc/fr/gui_create_yacs.rst
new file mode 100644 (file)
index 0000000..d16ea88
--- /dev/null
@@ -0,0 +1,138 @@
+.. _gui_create_yacs:
+
+Le schéma YACS
+##############
+.. index:: single: YACS
+.. index:: single: cas
+
+L'objet YACS contient toutes les définitions permettant de créer un schéma. Ce schéma va piloter l'alternance d'un calcul représentant une modélisation physique sur un maillage et l'adaptation de ce maillage de calcul. Cette alternance est piloté par des critères de convergence.
+
+.. note::
+  Pour avoir une description détaillée de chacune des rubriques formant le schéma, consulter :doc:`yacs`
+
+Procédure à employer
+********************
+La création automatique du schéma va se faire en trois phases :
+
+- Au départ, il faut avoir fait un calcul sur un tout premier maillage. Ce calcul aura produit des résultats dans un fichier MED.
+- Ensuite, on crée un cas dans le module HOMARD, tel qu'il est décrit dans :doc:`gui_create_case`. Dans ce cas, on crée une itération suivante du maillage en définissant une hypothèse d'adaptation ; voir :doc:`gui_create_iteration`.
+- Enfin, de ce cas, on va créer le schéma qui se basera sur l'hypothèse d'adapation définie.
+
+
+.. image:: images/create_yacs_01.png
+   :align: center
+   :alt: yacs - création
+   :width: 551
+   :height: 295
+
+Nom du schéma
+*************
+Un nom de schéma est proposé automatiquement : YACS_1, YACS_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour un autre schéma.
+
+Le script
+*********
+
+Le fichier contenant le script qui permet de lancer le calcul lié à la modélisation physique est fourni ici. C'est un script python qui doit respecter les règles suivantes :
+
+- le nom de la classe qui gère le calcul est ``Script``
+- le lancement du calcul se fait par la méthode ``Compute()``
+- le résultat du calcul est sous la forme de trois variables : le code d'erreur, un message, un dictionnaire python.
+
+S'ils sont nécessaires à la création de la classe, on peut passer des arguments sous la forme :
+
+- ``--rep_calc=rep_calc``, où ``rep_calc`` est le répertoire de calcul
+- ``--num=num``, où ``num`` est le numéro du calcul  : 0 pour le tout premier, puis 1, 2 etc.
+- ``--mesh_file=meshfile``, où ``meshfile`` est le fichier contenant le maillage sur lequel calculer.
+- ``-v``, pour des messages
+
+Les arguments de retour :
+
+- ``erreur`` : le code d'erreur, entier : 0 si le calcul est correct, non nul sinon
+- ``message`` : un éventuel message d'information sur le calcul
+- ``dico_resu`` : un dictionnaire python qui comprend a minima les deux clés suivantes : ``FileName`` est la clé pour le nom du fichier MED qui contient les résultats du calcul, ``V_TEST`` est la clé pour la valeur réelle à tester.
+
+
+Exemple d'usage du script :
+::
+
+    argu = ["--rep_calc=" + rep_calc)]
+    argu.append("--num=%d" % numCalc)
+    argu.append("--mesh_file="  + MeshFile)
+    Script_A = Script(argu)
+    erreur, message, dico_resu = Script_A.compute ()
+
+Le répertoire
+*************
+Le répertoire est celui qui contiend les fichiers produits par le calcul. Par défaut, rien n'est proposé. Le choix est fait, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
+
+Le maillage initial
+*******************
+Le maillage initial doit se trouver dans un fichier au format MED. C'est celui qui est le point de départ du tout premier calcul. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
+
+
+Le type de schéma
+*****************
+Plusieurs types de schéma sont proposés : constant ou variable.
+
+L'option par défaut, 'constant', alterne le lancement d'un calcul qui est toujours le même et une adaptation de maillage : d'un calcul à l'autre, la seule chose qui change est le maillage. Tout le reste est identique. Par exemple, dans le cas où le calcul modéliserait un transitoire, c'est toujours l'intégralité du transitoire qui est prise en compte.
+
+L'option 'variable' est inactive aujourd'hui.
+
+Enregistrement du schéma
+************************
+Par défaut, le schéma produit est écrit dans le fichier ``schema.xml`` dans le répertoire lié au cas qui en est le support. Si on a détruit le fichier, on peut le recréer en activant la fonction **Ecrire le fichier** à la souris.
+
+L'arbre d'étude
+***************
+.. index:: single: arbre d'étude
+
+A l'issue de cette création de schéma, l'arbre d'études a été enrichi. On y trouve tous les schémas créés, identifiés par leur nom, avec la possibilité de les éditer. Sous chaque référence de schéma, on trouve le lien avec le cas qui en est le support ainsi que le fichier `xml` qui a été créé. On peut lire ce fichier.
+
+.. image:: images/create_yacs_1.png
+   :align: center
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_yacs`
+
+Utilisation du schéma
+#####################
+
+Le schéma produit par cette saisie est directement importable dans le module YACS. Il peut se lancer sans modification. Dans ce cas, l'arrêt dans la boucle a lieu ainsi :
+
+- soit on a atteint le nombre maximal d'itérations dans la boucle d'alternance (calcul,adaptation) ;
+- soit le test de convergence sur la variable ``V_TEST`` est satisfait.
+
+Par défaut le nombre maximal d'itérations est fixé à 5 et le test de convergence est satisfait si la variable bouge de moins de 1 pour mille en valeur relative entre deux itérations successives. On peut évidemment modifier ces tests.
+
+Ces tests sont réalisés dans le noeud python "Analyse" du schéma, comme décrit dans :doc:`yacs`.
+
+Le nombre maximal d'itérations est modifiable par la variable `NbCalcMax` :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 112-112
+
+La valeur de test est stockée dans une liste au fur et à mesure des passages :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 137-141
+
+et le test a lieu à partir du deuxième passage :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 143-148
+
+Si on veut remplacer ce test par un autre, c'est ici qu'il faut le faire. Il faut simplement conserver le contenu produit à la convergence pour assurer la bonne marche de la suite du schéma :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 146-148
+
+Exemples
+########
+.. index:: single: Code_Aster
+
+Un mode d'emploi associé à la création de schéma avec *Code_Aster* est disponible en consultant : :doc:`gui_create_yacs_aster`.
+
+
+
+
diff --git a/doc/fr/gui_create_yacs_aster.rst b/doc/fr/gui_create_yacs_aster.rst
new file mode 100644 (file)
index 0000000..3a005b9
--- /dev/null
@@ -0,0 +1,77 @@
+.. _gui_create_yacs_aster:
+
+Un schéma YACS pour Code_Aster
+##############################
+.. index:: single: YACS
+.. index:: single: Code_Aster
+
+Dans le cas où le schéma implique un couplage entre *Code_Aster* et HOMARD, une façon de faire est décrite ici. Les seules contraintes sont des conventions pour que le script de pilotage de *Code_Aster* fonctionne correctement au sein du schéma.
+
+Préparations
+************
+Le répertoire de calcul
+=======================
+La première phase consiste à créer un répertoire qui abritera les fichiers du calcul et les fichiers des maillages successifs.
+
+Les commandes
+=============
+Les commandes du calcul sont à définir comme pour n'importe quel calcul. On particularisera uniquement la récupération de la valeur de test pour la convergence.
+
+La valeur de test
+-----------------
+Pour récupérer la valeur de test ``V_TEST``, le script va chercher dans le fichier ``resu``, la ligne de type :
+::
+
+    V_TEST    0.02071983
+
+Pour cela, la meilleure façon consiste à placer la valeur à tester dans une table intitulée ``V_TEST``, par exemple après une extraction depuis un résultat :
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 53-59
+
+puis à imprimer cette table en se limitant aux deux paramètres ``INTITULE`` et composante retenue :
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 63-64
+
+Le pilotage de l'adaptation
+---------------------------
+Si on souhaite piloter l'adaptation par un champ, il faudra écrire ce champ dans le fichier MED de sortie. Ce peut être un indicateur d'erreur (commande CALC_ERREUR) ou un autre champ.
+
+Par exemple :
+
+.. literalinclude:: ../files/yacs_aster_01.comm
+   :lines: 68-78
+
+Le script
+=========
+Le script de pilotage de *Code_Aster* à fournir au schéma YACS est à télécharger ici : :download:`ScriptAster<../files/yacs_script.py>`. Ce fichier peut être placé n'importe où.
+
+Comment procéder ?
+******************
+Un premier calcul
+=================
+Une fois les commandes au point, il faut lancer un premier calcul. Cela permet de choisir le paramétrage du calcul : version de *Code_Aster*, serveur de calcul, interactif/batch, etc. Ce sont ces paramètres qui seront utilisés pour les calculs successifs dans le schéma. Le lancement de *Code_Aster* rassemble ces informations dans un fichier de type ``export``. Il faut copier ce fichier sous le nom ``calcul.ref.export`` dans le répertoire de calcul.
+
+Création du schéma
+==================
+Quand le calcul est terminé, il faut enchaîner les étapes suivante :
+
+- vérifier que le fichier de résultats au format MED a été créé et que le fichier de résultats de type ``resu`` contient la ligne donnant la valeur à tester ;
+- activer le module HOMARD de SALOME ;
+- créer un cas à partir du maillage initial ;
+- créer une itération en se basant sur le champ que l'on a retenu ;
+- éventuellement calculer cette itération pour contrôler les choix, mais ce n'est pas obligatoire ;
+- créer le schéma basé sur ce cas.
+
+Lancer le schéma
+================
+Le schéma est écrit dans le fichier ``schema.xml`` dans le répertoire lié au cas qui en est le support. Ce fichier peut être déplacé sans problème. On peut modifier les paramètres de contrôle par défaut de la boucle de l'alternance (calcul/adaptation).
+
+On active alors le module YACS, on importe le schéma et on l'exécute.
+
+
+
+
+
+
diff --git a/doc/fr/gui_create_zone.rst b/doc/fr/gui_create_zone.rst
new file mode 100644 (file)
index 0000000..eebf705
--- /dev/null
@@ -0,0 +1,111 @@
+.. _gui_create_zone:
+
+La zone
+#######
+.. index:: single: zone
+.. index:: single: 2D
+
+L'objet zone contient toutes les définitions géométriques permettant de décrire une zone à raffiner.
+
+En 3D, il existe quatre types de zone :
+
+  - Parallélépipède
+  - Cylindre
+  - Tuyau
+  - Sphère
+
+Leurs analogues en 2D sont :
+
+  - Rectangle
+  - Disque
+  - Disque percé
+
+Le principe du raffinement selon des zones est le suivant. Chaque arête de maille dont les deux extrémités
+sont incluses dans une même zone sera coupée. Ensuite HOMARD applique l'algorithme de traitement de la
+conformité pour produire un maillage correct.
+
+.. note::
+  Les valeurs proposées par défaut pour les dimensions des zones tiennent compte de la géométrie du maillage.
+
+Nom de la zone
+**************
+Un nom de zone est proposé automatiquement : Zone_1, Zone_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour une autre zone.
+
+Un parallélépipède
+******************
+.. index:: single: boite
+
+Le parallélépipède est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chaque direction.
+
+.. image:: images/create_zone_1.png
+   :align: center
+
+Un cylindre
+***********
+.. index:: single: cylindre
+
+Le cylindre est défini par son axe, un point de base positionné sur l'axe, sa hauteur et son rayon. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1.
+
+.. image:: images/create_zone_2.png
+   :align: center
+
+Un tuyau
+********
+.. index:: single: tuyau
+
+Le tuyau est défini par son axe, un point de base positionné sur l'axe, sa hauteur et ses rayons interne et externe. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1.
+
+.. image:: images/create_zone_3.png
+   :align: center
+
+Une sphère
+**********
+.. index:: single: sphere
+
+La sphère est définie par son centre et son rayon.
+
+.. image:: images/create_zone_4.png
+   :align: center
+
+Un rectangle
+************
+.. index:: single: rectangle
+
+Le rectangle est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chacune des directions valides. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
+
+.. image:: images/create_zone_21.png
+   :align: center
+
+Un disque
+*********
+.. index:: single: disque
+
+Le disque est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et son rayon. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
+
+.. image:: images/create_zone_22.png
+   :align: center
+
+Un disque avec trou
+*******************
+.. index:: single: disque avec trou
+
+Le disque avec trou est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et ses rayons externe et interne. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
+
+.. image:: images/create_zone_23.png
+   :align: center
+
+
+L'arbre d'étude
+***************
+.. index:: single: arbre d'étude
+
+A l'issue de cette création de zone, l'arbre d'études a été enrichi. On y trouve toutes les zones créées, identifiées par leur nom, avec la possibilité de les éditer.
+
+.. image:: images/create_zone_01.png
+   :align: center
+   :alt: zone - arbre d'études
+
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_zone`
diff --git a/doc/fr/gui_homard.rst b/doc/fr/gui_homard.rst
new file mode 100644 (file)
index 0000000..8170578
--- /dev/null
@@ -0,0 +1,51 @@
+.. _gui_homard:
+
+Le calcul
+#########
+.. index:: single: itération
+.. index:: single: calcul
+.. index:: single: SMESH
+
+Lancer une adaptation
+*********************
+Lancer une adaptation s'obtient en sélectionnant l'itération à calculer. Elle est repérée par une icone "en attente". On choisit ensuite "*Calculer*" ou "*Calculer et publier*" dans le menu HOMARD ou à la souris. Dans le premier cas, l'adaptation sera réalisée et les fichiers MED seront écrits. Dans le second cas, le nouveau maillage sera publié dans SMESH. On notera que si on a seulement utilisé "*Calculer*", il est toujours possible de publier a posteriori le maillage produit en sélectionnant le choix "*Publier*".
+
+.. image:: images/lancement_1.png
+   :align: center
+
+.. index:: single: arbre d'étude
+
+L'arbre d'étude
+***************
+
+A l'issue de ce calcul, l'arbre d'études a été enrichi. L'icone devant l'itération est validée. Sous l'itération, on trouve la référence aux fichiers de résultats créés, identifiés par leur nom dans le répertoire *rep* qui a été défini à la création du cas :
+
+  - *rep*/I(n+1)/Liste.n.vers.(n+1).log
+  - *rep*/I(n+1)/apad.n.vers.(n+1).bilan
+  - *rep*/maill.(n+1).med
+
+Les deux premiers fichiers sont des fichiers de texte, éditables. Liste.n.vers.(n+1).log contient des informations sur le déroulement de l'adaptation : récapitulatif du mode d'adaptation, pourcentage de mailles concernées, etc. Le fichier apad.n.vers.(n+1).bilan est un résumé des caractéristiques du maillage obtenu.
+
+Le fichier maill.(n+1).med est celui qui contient le maillage produit au format MED. Si on a demandé la publication, on retrouve ce maillage dans la section de l'arbre d'études du module SMESH. Il est alors visible dans ce module et utilisable ensuite comme tout autre maillage.
+
+
+.. image:: images/lancement_2.png
+   :align: center
+
+Consulter le résultat d'une adaptation
+**************************************
+Les deux fichiers de texte, Liste.n.vers.(n+1).log et apad.n.vers.(n+1).bilan, sont visibles en les sélectionnant. On choisit ensuite "*Afficher le fichier*" dans le menu HOMARD ou à la souris.
+
+.. image:: images/lancement_3.png
+   :align: center
+
+
+.. note::
+  Par défaut, le calcul est lancé avec l'exécutable de HOMARD installé avec SALOME. Si on souhaite utiliser une version privée de HOMARD, pour tester une évolution par exemple, il faut préciser où le nouvel exécutable est disponible. Pour cela, il faut renseigner deux variables d'environnement.
+  "*HOMARD_REP_EXE_PRIVATE*" définit le répertoire dans lequel se trouve l'exécutable voulu.
+  "*HOMARD_EXE_PRIVATE*" définit le nom de l'exécutable dans ce répertoire, si ce nom est différent de "*homard*".
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_iteration`
+
diff --git a/doc/fr/gui_mesh_info.rst b/doc/fr/gui_mesh_info.rst
new file mode 100644 (file)
index 0000000..de18a17
--- /dev/null
@@ -0,0 +1,92 @@
+.. _gui_mesh_info:
+
+Analyse de maillage
+###################
+.. index:: single: analyse
+.. index:: single: information
+
+La demande d'analyse d'un maillage se fait par la donnée des informations suivantes :
+
+  - Un répertoire
+  - Le fichier du maillage
+
+Si le maillage fait partie d'un cas enregistré, son analyse est faite à partir de son itération dans l'arbre d'études. Voir plus loin.
+
+
+Maillage à importer
+*******************
+La sélection de la fonction d'analyse est faite par le menu de la barre supérieure de la fenêtre :
+
+.. image:: images/mesh_info_1.png
+   :align: center
+
+La fenêtre de choix s'affiche.
+
+.. image:: images/mesh_info_2.png
+   :align: center
+
+Le nom du cas
+=============
+Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas.
+
+Le répertoire
+=============
+Le répertoire est celui qui contiendra les fichiers produits par l'information. Par défaut, rien n'est proposé. Le choix est fait, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``. Ces fichiers seront visibles dans l'arbre d'études.
+
+.. image:: images/create_case_2.png
+   :align: center
+
+.. index:: single: maillage;initial
+.. index:: single: MED
+
+Le maillage à analyser
+======================
+Le maillage à analyser doit se trouver dans un fichier au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
+
+.. image:: images/create_case_3.png
+   :align: center
+
+.. note::
+  Le fichier ne doit contenir qu'un seul maillage.
+
+.. warning::
+  Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre l'analyse des différents niveaux de raffinement/déraffinement.
+
+Options d'analyse
+=================
+L'analyse est faite selon les options cochées.
+  - qualité des mailles
+  - diamètre des mailles
+  - connexité du domaine ; en un seul morceau, combien de trous, etc.
+  - tailles des constituants du domaine, groupe par groupe
+  - interpénétration des mailles, par dimension
+
+Le résultat de l'analyse est contenu dans le fichier ``info_av.00.bilan`` ; ce fichier est à consulter en l'affichant après sa désignation avec "*Afficher le fichier*" dans le menu HOMARD ou à la souris.
+
+L'arbre d'étude
+===============
+A l'issue de cette demande d'information, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, et les deux fichiers d'information de nom ``Liste.log`` et ``info_av.00.bilan``.
+
+.. image:: images/mesh_info_3.png
+   :align: center
+
+
+Itération calculée
+******************
+
+Pour analyser le maillage produit par une itération d'adaptation de maillage, on désigne à la souris cette itération dans l'arbre d'études et on lance l'analyse. On retrouve le menu similaire au cas initial :
+
+.. image:: images/mesh_info_4.png
+   :align: center
+
+Comme pour un maillage importé, l'arbre d'études a été enrichi avec les deux fichiers d'information de nom ``Liste.log`` et ``info_ap.xx.bilan``, où xx est le numéro de l'itération dans le cas.
+
+.. image:: ../images/mesh_info_5.png
+   :align: center
+
+
+
+Méthodes python correspondantes
+*******************************
+Consulter :doc:`tui_create_case` et :doc:`tui_create_iteration`
+
diff --git a/doc/fr/gui_usage.rst b/doc/fr/gui_usage.rst
new file mode 100644 (file)
index 0000000..c4c2a50
--- /dev/null
@@ -0,0 +1,61 @@
+.. _gui_usage:
+
+Mode d'emploi pour l'interface graphique
+########################################
+.. index:: single: cas
+.. index:: single: itération
+
+Activer le module HOMARD
+************************
+Pour utiliser le module HOMARD, deux façons existent :
+
+#. en activant l'onglet HOMARD dans la liste des modules,
+#. en cliquant sur le bouton HOMARD dans la barre d'outils.
+
+L'utilisateur a alors le choix entre créer une nouvelle étude ou en ouvrir une qui a été précédemment enregistrée, selon le principe qui a été retenu pour tous les autres modules de SALOME.
+
+.. image:: images/homard_1.png
+   :align: center
+
+Définir une adaptation
+**********************
+
+Une fois que HOMARD a été activé, la permière action consiste à créer un cas. Il s'agit de sélectionner le maillage initial de la suite d'adaptations envisagée (voir :doc:`gui_create_case`). A partir de ce cas, on définira les itérations successives (voir :doc:`gui_create_iteration`) à partir des hypothèses (voir :doc:`gui_create_hypothese`). Les adaptations sont lancées tel que décrit dans :doc:`gui_homard`.
+
+
+Mode d'emploi de la saisie des données
+**************************************
+
+.. toctree::
+   :maxdepth: 2
+
+   gui_create_case
+   gui_create_iteration
+   gui_create_hypothese
+   gui_create_zone
+   gui_create_boundary
+   gui_homard
+   gui_mesh_info
+
+
+Création d'un schéma YACS
+*************************
+
+Le module HOMARD propose la création automatique de schémas YACS alternant un calcul et une adaptation de maillage.
+
+.. toctree::
+   :maxdepth: 2
+
+   gui_create_yacs
+   gui_create_yacs_aster
+
+
+Préférences
+***********
+
+Un certain nombre de choix par défaut pour le module HOMARD sont définis dans les préférences.
+
+.. toctree::
+   :maxdepth: 2
+
+   preferences
diff --git a/doc/fr/images/create_boundary_1.png b/doc/fr/images/create_boundary_1.png
new file mode 100644 (file)
index 0000000..0460d48
Binary files /dev/null and b/doc/fr/images/create_boundary_1.png differ
diff --git a/doc/fr/images/create_boundary_an_1.png b/doc/fr/images/create_boundary_an_1.png
new file mode 100644 (file)
index 0000000..09630eb
Binary files /dev/null and b/doc/fr/images/create_boundary_an_1.png differ
diff --git a/doc/fr/images/create_boundary_an_2.png b/doc/fr/images/create_boundary_an_2.png
new file mode 100644 (file)
index 0000000..25c6e9b
Binary files /dev/null and b/doc/fr/images/create_boundary_an_2.png differ
diff --git a/doc/fr/images/create_boundary_an_3.png b/doc/fr/images/create_boundary_an_3.png
new file mode 100644 (file)
index 0000000..6f38d9f
Binary files /dev/null and b/doc/fr/images/create_boundary_an_3.png differ
diff --git a/doc/fr/images/create_boundary_an_4.png b/doc/fr/images/create_boundary_an_4.png
new file mode 100644 (file)
index 0000000..abf1042
Binary files /dev/null and b/doc/fr/images/create_boundary_an_4.png differ
diff --git a/doc/fr/images/create_boundary_an_co_1.png b/doc/fr/images/create_boundary_an_co_1.png
new file mode 100644 (file)
index 0000000..7212cba
Binary files /dev/null and b/doc/fr/images/create_boundary_an_co_1.png differ
diff --git a/doc/fr/images/create_boundary_an_co_2.png b/doc/fr/images/create_boundary_an_co_2.png
new file mode 100644 (file)
index 0000000..017b56d
Binary files /dev/null and b/doc/fr/images/create_boundary_an_co_2.png differ
diff --git a/doc/fr/images/create_boundary_an_cy.png b/doc/fr/images/create_boundary_an_cy.png
new file mode 100644 (file)
index 0000000..2efc3fd
Binary files /dev/null and b/doc/fr/images/create_boundary_an_cy.png differ
diff --git a/doc/fr/images/create_boundary_an_sp.png b/doc/fr/images/create_boundary_an_sp.png
new file mode 100644 (file)
index 0000000..be7b28b
Binary files /dev/null and b/doc/fr/images/create_boundary_an_sp.png differ
diff --git a/doc/fr/images/create_boundary_an_to.png b/doc/fr/images/create_boundary_an_to.png
new file mode 100644 (file)
index 0000000..beb362c
Binary files /dev/null and b/doc/fr/images/create_boundary_an_to.png differ
diff --git a/doc/fr/images/create_boundary_di_1.png b/doc/fr/images/create_boundary_di_1.png
new file mode 100644 (file)
index 0000000..8f80605
Binary files /dev/null and b/doc/fr/images/create_boundary_di_1.png differ
diff --git a/doc/fr/images/create_boundary_di_2.png b/doc/fr/images/create_boundary_di_2.png
new file mode 100644 (file)
index 0000000..d952eda
Binary files /dev/null and b/doc/fr/images/create_boundary_di_2.png differ
diff --git a/doc/fr/images/create_boundary_di_3.png b/doc/fr/images/create_boundary_di_3.png
new file mode 100644 (file)
index 0000000..01195a1
Binary files /dev/null and b/doc/fr/images/create_boundary_di_3.png differ
diff --git a/doc/fr/images/create_case_2.png b/doc/fr/images/create_case_2.png
new file mode 100644 (file)
index 0000000..435a518
Binary files /dev/null and b/doc/fr/images/create_case_2.png differ
diff --git a/doc/fr/images/create_case_3.png b/doc/fr/images/create_case_3.png
new file mode 100644 (file)
index 0000000..eba3197
Binary files /dev/null and b/doc/fr/images/create_case_3.png differ
diff --git a/doc/fr/images/create_case_4.png b/doc/fr/images/create_case_4.png
new file mode 100644 (file)
index 0000000..58d038e
Binary files /dev/null and b/doc/fr/images/create_case_4.png differ
diff --git a/doc/fr/images/create_case_5.png b/doc/fr/images/create_case_5.png
new file mode 100644 (file)
index 0000000..418535b
Binary files /dev/null and b/doc/fr/images/create_case_5.png differ
diff --git a/doc/fr/images/create_case_6.png b/doc/fr/images/create_case_6.png
new file mode 100644 (file)
index 0000000..c598729
Binary files /dev/null and b/doc/fr/images/create_case_6.png differ
diff --git a/doc/fr/images/create_case_7.png b/doc/fr/images/create_case_7.png
new file mode 100644 (file)
index 0000000..bb7106f
Binary files /dev/null and b/doc/fr/images/create_case_7.png differ
diff --git a/doc/fr/images/create_case_8.png b/doc/fr/images/create_case_8.png
new file mode 100644 (file)
index 0000000..00bee53
Binary files /dev/null and b/doc/fr/images/create_case_8.png differ
diff --git a/doc/fr/images/create_case_9.png b/doc/fr/images/create_case_9.png
new file mode 100644 (file)
index 0000000..f5fe038
Binary files /dev/null and b/doc/fr/images/create_case_9.png differ
diff --git a/doc/fr/images/create_hypothese_1.png b/doc/fr/images/create_hypothese_1.png
new file mode 100644 (file)
index 0000000..73b7d54
Binary files /dev/null and b/doc/fr/images/create_hypothese_1.png differ
diff --git a/doc/fr/images/create_hypothese_2.png b/doc/fr/images/create_hypothese_2.png
new file mode 100644 (file)
index 0000000..fbb434b
Binary files /dev/null and b/doc/fr/images/create_hypothese_2.png differ
diff --git a/doc/fr/images/create_hypothese_av_1.png b/doc/fr/images/create_hypothese_av_1.png
new file mode 100644 (file)
index 0000000..b69b9a6
Binary files /dev/null and b/doc/fr/images/create_hypothese_av_1.png differ
diff --git a/doc/fr/images/create_hypothese_ch_1.png b/doc/fr/images/create_hypothese_ch_1.png
new file mode 100644 (file)
index 0000000..392ef7b
Binary files /dev/null and b/doc/fr/images/create_hypothese_ch_1.png differ
diff --git a/doc/fr/images/create_hypothese_ch_2.png b/doc/fr/images/create_hypothese_ch_2.png
new file mode 100644 (file)
index 0000000..ce3d944
Binary files /dev/null and b/doc/fr/images/create_hypothese_ch_2.png differ
diff --git a/doc/fr/images/create_hypothese_ch_3.png b/doc/fr/images/create_hypothese_ch_3.png
new file mode 100644 (file)
index 0000000..a78111d
Binary files /dev/null and b/doc/fr/images/create_hypothese_ch_3.png differ
diff --git a/doc/fr/images/create_hypothese_ch_4.png b/doc/fr/images/create_hypothese_ch_4.png
new file mode 100644 (file)
index 0000000..b48f651
Binary files /dev/null and b/doc/fr/images/create_hypothese_ch_4.png differ
diff --git a/doc/fr/images/create_hypothese_ch_5.png b/doc/fr/images/create_hypothese_ch_5.png
new file mode 100644 (file)
index 0000000..4151dd8
Binary files /dev/null and b/doc/fr/images/create_hypothese_ch_5.png differ
diff --git a/doc/fr/images/create_hypothese_gr_1.png b/doc/fr/images/create_hypothese_gr_1.png
new file mode 100644 (file)
index 0000000..34f937f
Binary files /dev/null and b/doc/fr/images/create_hypothese_gr_1.png differ
diff --git a/doc/fr/images/create_hypothese_gr_2.png b/doc/fr/images/create_hypothese_gr_2.png
new file mode 100644 (file)
index 0000000..3153ad4
Binary files /dev/null and b/doc/fr/images/create_hypothese_gr_2.png differ
diff --git a/doc/fr/images/create_hypothese_zo_1.png b/doc/fr/images/create_hypothese_zo_1.png
new file mode 100644 (file)
index 0000000..0b4f025
Binary files /dev/null and b/doc/fr/images/create_hypothese_zo_1.png differ
diff --git a/doc/fr/images/create_hypothese_zo_2.png b/doc/fr/images/create_hypothese_zo_2.png
new file mode 100644 (file)
index 0000000..09353cf
Binary files /dev/null and b/doc/fr/images/create_hypothese_zo_2.png differ
diff --git a/doc/fr/images/create_iteration_1.png b/doc/fr/images/create_iteration_1.png
new file mode 100644 (file)
index 0000000..affb028
Binary files /dev/null and b/doc/fr/images/create_iteration_1.png differ
diff --git a/doc/fr/images/create_iteration_2.png b/doc/fr/images/create_iteration_2.png
new file mode 100644 (file)
index 0000000..3c02793
Binary files /dev/null and b/doc/fr/images/create_iteration_2.png differ
diff --git a/doc/fr/images/create_iteration_3.png b/doc/fr/images/create_iteration_3.png
new file mode 100644 (file)
index 0000000..a00ede7
Binary files /dev/null and b/doc/fr/images/create_iteration_3.png differ
diff --git a/doc/fr/images/create_iteration_4.png b/doc/fr/images/create_iteration_4.png
new file mode 100644 (file)
index 0000000..4366530
Binary files /dev/null and b/doc/fr/images/create_iteration_4.png differ
diff --git a/doc/fr/images/create_iteration_5.png b/doc/fr/images/create_iteration_5.png
new file mode 100644 (file)
index 0000000..92a9ab0
Binary files /dev/null and b/doc/fr/images/create_iteration_5.png differ
diff --git a/doc/fr/images/create_iteration_6.png b/doc/fr/images/create_iteration_6.png
new file mode 100644 (file)
index 0000000..339e1e1
Binary files /dev/null and b/doc/fr/images/create_iteration_6.png differ
diff --git a/doc/fr/images/create_iteration_7.png b/doc/fr/images/create_iteration_7.png
new file mode 100644 (file)
index 0000000..8816eef
Binary files /dev/null and b/doc/fr/images/create_iteration_7.png differ
diff --git a/doc/fr/images/create_yacs_01.png b/doc/fr/images/create_yacs_01.png
new file mode 100644 (file)
index 0000000..97f455d
Binary files /dev/null and b/doc/fr/images/create_yacs_01.png differ
diff --git a/doc/fr/images/create_yacs_1.png b/doc/fr/images/create_yacs_1.png
new file mode 100644 (file)
index 0000000..7450f9b
Binary files /dev/null and b/doc/fr/images/create_yacs_1.png differ
diff --git a/doc/fr/images/create_zone_01.png b/doc/fr/images/create_zone_01.png
new file mode 100644 (file)
index 0000000..ce012ad
Binary files /dev/null and b/doc/fr/images/create_zone_01.png differ
diff --git a/doc/fr/images/create_zone_1.png b/doc/fr/images/create_zone_1.png
new file mode 100644 (file)
index 0000000..aa32ef1
Binary files /dev/null and b/doc/fr/images/create_zone_1.png differ
diff --git a/doc/fr/images/create_zone_2.png b/doc/fr/images/create_zone_2.png
new file mode 100644 (file)
index 0000000..1664d52
Binary files /dev/null and b/doc/fr/images/create_zone_2.png differ
diff --git a/doc/fr/images/create_zone_21.png b/doc/fr/images/create_zone_21.png
new file mode 100644 (file)
index 0000000..8d156f1
Binary files /dev/null and b/doc/fr/images/create_zone_21.png differ
diff --git a/doc/fr/images/create_zone_22.png b/doc/fr/images/create_zone_22.png
new file mode 100644 (file)
index 0000000..f27faaa
Binary files /dev/null and b/doc/fr/images/create_zone_22.png differ
diff --git a/doc/fr/images/create_zone_23.png b/doc/fr/images/create_zone_23.png
new file mode 100644 (file)
index 0000000..8bce36d
Binary files /dev/null and b/doc/fr/images/create_zone_23.png differ
diff --git a/doc/fr/images/create_zone_3.png b/doc/fr/images/create_zone_3.png
new file mode 100644 (file)
index 0000000..abaf406
Binary files /dev/null and b/doc/fr/images/create_zone_3.png differ
diff --git a/doc/fr/images/create_zone_4.png b/doc/fr/images/create_zone_4.png
new file mode 100644 (file)
index 0000000..26955a8
Binary files /dev/null and b/doc/fr/images/create_zone_4.png differ
diff --git a/doc/fr/images/homard_1.png b/doc/fr/images/homard_1.png
new file mode 100644 (file)
index 0000000..727bbb1
Binary files /dev/null and b/doc/fr/images/homard_1.png differ
diff --git a/doc/fr/images/homard_2.png b/doc/fr/images/homard_2.png
new file mode 100644 (file)
index 0000000..11c70be
Binary files /dev/null and b/doc/fr/images/homard_2.png differ
diff --git a/doc/fr/images/intro_1.png b/doc/fr/images/intro_1.png
new file mode 100644 (file)
index 0000000..bfc3bd2
Binary files /dev/null and b/doc/fr/images/intro_1.png differ
diff --git a/doc/fr/images/intro_31.png b/doc/fr/images/intro_31.png
new file mode 100644 (file)
index 0000000..175264e
Binary files /dev/null and b/doc/fr/images/intro_31.png differ
diff --git a/doc/fr/images/intro_32.png b/doc/fr/images/intro_32.png
new file mode 100644 (file)
index 0000000..f4022ca
Binary files /dev/null and b/doc/fr/images/intro_32.png differ
diff --git a/doc/fr/images/intro_33.png b/doc/fr/images/intro_33.png
new file mode 100644 (file)
index 0000000..a0bd05e
Binary files /dev/null and b/doc/fr/images/intro_33.png differ
diff --git a/doc/fr/images/intro_331.png b/doc/fr/images/intro_331.png
new file mode 100644 (file)
index 0000000..0b47170
Binary files /dev/null and b/doc/fr/images/intro_331.png differ
diff --git a/doc/fr/images/intro_34.png b/doc/fr/images/intro_34.png
new file mode 100644 (file)
index 0000000..9486689
Binary files /dev/null and b/doc/fr/images/intro_34.png differ
diff --git a/doc/fr/images/intro_35.png b/doc/fr/images/intro_35.png
new file mode 100644 (file)
index 0000000..73b7d54
Binary files /dev/null and b/doc/fr/images/intro_35.png differ
diff --git a/doc/fr/images/intro_36.png b/doc/fr/images/intro_36.png
new file mode 100644 (file)
index 0000000..36a77bf
Binary files /dev/null and b/doc/fr/images/intro_36.png differ
diff --git a/doc/fr/images/intro_37.png b/doc/fr/images/intro_37.png
new file mode 100644 (file)
index 0000000..f04c512
Binary files /dev/null and b/doc/fr/images/intro_37.png differ
diff --git a/doc/fr/images/intro_38.png b/doc/fr/images/intro_38.png
new file mode 100644 (file)
index 0000000..2d29392
Binary files /dev/null and b/doc/fr/images/intro_38.png differ
diff --git a/doc/fr/images/intro_39.png b/doc/fr/images/intro_39.png
new file mode 100644 (file)
index 0000000..ad542ba
Binary files /dev/null and b/doc/fr/images/intro_39.png differ
diff --git a/doc/fr/images/intro_8.gif b/doc/fr/images/intro_8.gif
new file mode 100644 (file)
index 0000000..b11d925
Binary files /dev/null and b/doc/fr/images/intro_8.gif differ
diff --git a/doc/fr/images/lancement_1.png b/doc/fr/images/lancement_1.png
new file mode 100644 (file)
index 0000000..37313e3
Binary files /dev/null and b/doc/fr/images/lancement_1.png differ
diff --git a/doc/fr/images/lancement_2.png b/doc/fr/images/lancement_2.png
new file mode 100644 (file)
index 0000000..9655bcb
Binary files /dev/null and b/doc/fr/images/lancement_2.png differ
diff --git a/doc/fr/images/lancement_3.png b/doc/fr/images/lancement_3.png
new file mode 100644 (file)
index 0000000..aef0b24
Binary files /dev/null and b/doc/fr/images/lancement_3.png differ
diff --git a/doc/fr/images/mesh_info_1.png b/doc/fr/images/mesh_info_1.png
new file mode 100644 (file)
index 0000000..cecd757
Binary files /dev/null and b/doc/fr/images/mesh_info_1.png differ
diff --git a/doc/fr/images/mesh_info_2.png b/doc/fr/images/mesh_info_2.png
new file mode 100644 (file)
index 0000000..9f77229
Binary files /dev/null and b/doc/fr/images/mesh_info_2.png differ
diff --git a/doc/fr/images/mesh_info_3.png b/doc/fr/images/mesh_info_3.png
new file mode 100644 (file)
index 0000000..0419327
Binary files /dev/null and b/doc/fr/images/mesh_info_3.png differ
diff --git a/doc/fr/images/mesh_info_4.png b/doc/fr/images/mesh_info_4.png
new file mode 100644 (file)
index 0000000..ea3ec0c
Binary files /dev/null and b/doc/fr/images/mesh_info_4.png differ
diff --git a/doc/fr/images/preferences_1.png b/doc/fr/images/preferences_1.png
new file mode 100644 (file)
index 0000000..84e9fcc
Binary files /dev/null and b/doc/fr/images/preferences_1.png differ
diff --git a/doc/fr/images/pursue_case_1.png b/doc/fr/images/pursue_case_1.png
new file mode 100644 (file)
index 0000000..7158970
Binary files /dev/null and b/doc/fr/images/pursue_case_1.png differ
diff --git a/doc/fr/images/pursue_case_2.png b/doc/fr/images/pursue_case_2.png
new file mode 100644 (file)
index 0000000..ac3cd9d
Binary files /dev/null and b/doc/fr/images/pursue_case_2.png differ
diff --git a/doc/fr/images/pursue_case_3.png b/doc/fr/images/pursue_case_3.png
new file mode 100644 (file)
index 0000000..f0f8f6f
Binary files /dev/null and b/doc/fr/images/pursue_case_3.png differ
diff --git a/doc/fr/index.rst b/doc/fr/index.rst
new file mode 100644 (file)
index 0000000..53652fe
--- /dev/null
@@ -0,0 +1,64 @@
+.. HOMARD documentation master file, created by
+   sphinx-quickstart on Tue Jan  5 08:51:14 2010.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+.. |logo| image:: ../images/HOMARD.png
+
+Documentation du composant HOMARD  |logo|
+#########################################
+HOMARD est le composant qui permet l'adaptation de maillage au sein de la plateforme SALOME. Cette documentation est partagée en deux parties. La première, intitulée "Mode d'emploi" décrit le pilotage du module en mode graphique, ou par un script python, ou dans un schéma YACS. La seconde partie, intitulée "Présentation générale" décrit avec des exemples les caractéristiques de HOMARD.
+
+Mode d'emploi
+*************
+
+.. toctree::
+   :maxdepth: 1
+
+   demarrage_rapide
+   gui_usage
+   tui_usage
+   yacs
+   tutorials
+
+Présentation générale
+*********************
+
+.. toctree::
+   :maxdepth: 1
+
+   intro
+   regles
+   divers
+
+Licence
+*******
+.. index:: single: Licence
+
+La licence pour ce module est la GNU Lesser General Public License (Lesser GPL), tel qu'il est déclaré ici et dans les fichiers source.
+
+.. literalinclude:: ../files/licence.fr.txt
+
+En complément, nous souhaitons que toute publication décrivant un travail utilisant ce module, ou tout produit commercial l'utilisant, cite au moins l'une des références ci-dessous :
+
+    * G. Nicolas, T. Fouquet, S. Geniaut, S. Cuvilliez, Improved Adaptive Mesh Refinement for Conformal Hexahedral Meshes, *Advances in Engineering Software*, Vol. 102, pp. 14-28, 2016, doi:10.1016/j.advengsoft.2016.07.014
+
+    * G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, *Finite Elements in Analysis and Design*, Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+    * *HOMARD, a SALOME module for Mesh Adaptation*,
+      http://www.salome-platform.org/
+
+    * *SALOME The Open Source Integration Platform for Numerical Simulation*,
+      http://www.salome-platform.org/
+
+La documentation de ce module est aussi couverte par la licence et l'obligation de citation.
+
+Index et tables
+***************
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+* :ref:`glossaire`
+
+*HOMARD est une marque déposée d'EDF.*
diff --git a/doc/fr/intro.rst b/doc/fr/intro.rst
new file mode 100644 (file)
index 0000000..b9b8b7c
--- /dev/null
@@ -0,0 +1,311 @@
+.. _intro:
+
+Introduction
+############
+
+Présentation générale
+*********************
+Le logiciel HOMARD est destiné à adapter les maillages dans le cadre des simulations numériques par éléments ou volumes finis. Ce logiciel, réalisé par EDF R&D, procède par raffinement et déraffinement des maillages bidimensionnels ou tridimensionnels. Il est conçu pour être utilisé indépendamment du logiciel auquel il est couplé.
+
+Raffiner le maillage signifie découper des mailles désignées selon des indications fournies par l'utilisateur. Déraffiner le maillage signifie revenir en arrière sur des découpages précédemment réalisés : ainsi, en aucun cas HOMARD ne peut simplifier un maillage existant qui aura été créé trop fin. Le déraffinement prend toute son importance dans les calculs quand la zone d'intérêt se déplace au cours du calcul : on ne tiendra plus compte de raffinements précédemment réalisés et qui deviennent inutiles. On en trouvera une illustration au bas de cette page.
+
+HOMARD sait traiter des maillages en 2 ou 3 dimensions et comportant les mailles suivantes :
+   - mailles-points
+   - segments
+   - triangles
+   - quadrangles
+   - tétraèdres
+   - hexaèdres
+   - prismes
+
+Ces mailles peuvent être présentes simultanément. Par exemple, HOMARD saura adapter un maillage comportant des triangles et des quadrangles.
+Les noeuds acceptés sont évidemment les noeuds qui sont les sommets des mailles, ce qui correspond à la description classique « en degré 1 » . Si les éléments sont décrits « en degré 2 », les noeuds complémentaires sont gérés. En revanche, il ne peut pas y avoir cohabitation de mailles décrites en degré 1 et d'autres décrites en degré 2. Enfin, HOMARD sait prendre en compte des noeuds isolés, qui n'appartiendraient à aucune définition de mailles : ils ressortiront tels quels du processus d'adaptation.
+
+Le cas des pyramides est à part. Pour un maillage comportant des hexaèdres ou des prismes, la mise en conformité du maillage issu du raffinement crée des pyramides pour assurer la liaison entre deux régions de niveaux de raffinement différents. Ces pyramides sont gérées comme toutes les mailles de transition et ne sont pas redécoupées par la suite. En revanche, si le maillage initial contient des pyramides, HOMARD ne saura pas l'adapter et émettra un message d'erreur. Dans certains cas particuliers, on pourra néanmoins traiter un tel maillage, comme il est décrit dans la rubrique :doc:`options_avancees` de la création du cas.
+
+Plusieurs motivations apparaissent pour adapter un maillage :
+
+  - on veut simplifier la réalisation du maillage d'une géométrie complexe : on part d'un maillage grossier et on confie à un processus automatique la charge de le raffiner.
+  - on veut s'assurer de la convergence de la solution numérique : plutôt que de réaliser à la main des maillages de plus en plus fins, on laisse le logiciel chercher lui-même les endroits où il faudrait affiner le maillage pour augmenter la précision du résultat.
+  - les conditions du calcul changent au cours de son déroulement : les zones qui doivent être maillées finement se déplacent. Si on maille fin partout dès le début, le maillage est trop gros. En adaptant au fur et à mesure, le maillage ne sera fin qu'aux endroits nécessaires : sa taille sera réduite et la qualité de la solution sera bonne.
+
+Dans tous les cas, le principe de l'adaptation de maillage reste le même. Sur le maillage de départ, on réalise le calcul standard. Avec une analyse de la solution numérique obtenue, on estime l'erreur qui a été commise par rapport à la solution réelle. Cette estimation se représente par une valeur d'indicateur d'erreur dans chaque maille du calcul. A partir de là, on applique le principe suivant : les mailles où l'indicateur d'erreur est fort devraient être plus petites et, réciproquement, les mailles où l'indicateur d'erreur est faible pourraient être plus grandes. Avec cette information, on alimente HOMARD qui va modifier le maillage en conséquence. Sur le nouveau maillage, on recommencera alors le calcul.
+
+Schématiquement, une itération d'adaptation de maillage se présente ainsi. Le logiciel calcule la solution numérique sur le maillage n°k, puis en déduit les valeurs de l'indicateur d'erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de l'indicateur n°k, HOMARD crée le nouveau maillage n°k+1.
+
+.. image:: images/intro_1.png
+   :align: center
+
+Au final, la chaîne complète part du maillage initial, puis comprend des maillons successifs (calcul d'indicateur / adaptation). Pour des problèmes stationnaires en temps, cela équivaut à une succession de calculs indépendants sur différents maillages. Pour des problèmes transitoires, le calcul est suspendu à un instant donné ; après adaptation du maillage, le calcul est repris au même instant ou à un instant antérieur.
+
+.. image:: ../images/intro_2.png
+   :align: center
+
+Des variantes de ce schéma de base sont possibles. Si aucun calcul d'erreur n'est disponible dans le logiciel couplé, on peut utiliser un champ pour piloter l'adaptation. Un champ de contraintes en mécaniques peut être utilisé : raffiner là où les contraintes sont importantes est souvent efficace pour améliorer la qualité de la simulation. On peut également adapter en fonction du saut d'une variable d'une maille à sa voisine ou dans une zone connue a priori. Grâce à ses nombreuses options, HOMARD permet d'envisager de multiples scénarios d'adaptation de maillage.
+
+.. note::
+  Pour une description plus complète, voir :download:`Description générale de HOMARD <../files/HOMARD_0.pdf>`.
+
+.. note::
+  Pour une référence à HOMARD, utiliser :
+
+  Gérald Nicolas, Thierry Fouquet, Samuel Geniaut, Sam Cuvilliez, Improved adaptive mesh refinement for conformal hexahedral meshes, "*Advances in Engineering Software*", Vol. 102, pp. 14-28, 2016, doi:10.1016/j.advengsoft.2016.07.014
+
+  `Accessible en cliquant ici <http://dx.doi.org/10.1016/j.advengsoft.2016.07.014>`_
+
+  G. Nicolas and T. Fouquet, Adaptive Mesh Refinement for Conformal Hexahedral Meshes, "*Finite Elements in Analysis and Design*", Vol. 67, pp. 1-12, 2013, doi:10.1016/j.finel.2012.11.008
+
+  `Accessible en cliquant ici <http://dx.doi.org/10.1016/j.finel.2012.11.008>`_
+
+.. index:: single: YACS
+
+.. note::
+  Cet alternance de calculs et d'adaptions est très appropriée à la mise en place de schémas :doc:`yacs`.
+
+Mode de découpage des mailles
+*****************************
+.. index:: single: découpage
+.. index:: single: conformité
+
+Globalement le processus de maillage adaptatif par découpage des mailles se résume en deux phases. Dans la première phase, on découpe toutes les mailles qui ont été désignées par les indications de pilotage. Cela produit un maillage qui n'est pas conforme : des noeuds sont pendants à la jonction entre une zone à raffiner et une zone à garder.
+La seconde phase vise à régler tous ces problèmes de conformité.
+
+A ces deux phases correspondent des modes de découpages différents.
+Dans la première phase, toutes les mailles sont découpées de la même manière ; c'est ce que nous appelons le découpage standard. Dans la seconde phase, une partie des conflits de conformité de maillage dans les zones de jonction se règle
+par les mêmes découpages standard de mailles et une autre partie se règle par des découpages spéciaux.
+
+Les modes de découpage décrits ci-dessous ont été choisis pour ne pas détériorer la qualité du maillage au cours des itérations d'adaptation.
+
+
+Le découpage standard
+=====================
+Le découpage standard des mailles se fait en ayant pour objectif de limiter les cas de figure.
+Ainsi, les arêtes sont-elles scindées en deux moitiés égales.
+
+Pour découper un triangle, on découpe ses trois arêtes en deux et on se trouve avec 4 triangles semblables. Ils conservent donc la même qualité.
+
+.. image:: ../images/dec_tria_1.gif
+   :align: center
+   :alt: Découpage standard d'un triangle
+   :width: 399
+   :height: 88
+
+Pour découper un quadrangle, on découpe ses quatre arêtes en deux et on se trouve avec 4 quadrangles non semblables au quadrangle père et donc de qualité différente.
+
+.. image:: ../images/dec_quad_1.png
+   :align: center
+   :alt: Découpage standard d'un quadrangle
+   :width: 399
+
+Le découpage des tétraèdres se fait en huit. Pour commencer, chacune des faces triangulaires est découpée en 4 faces triangulaires semblables.
+
+.. image:: ../images/dec_tetr_1.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 1
+   :width: 328
+   :height: 115
+
+Ce découpage des faces produit 4 tétraèdres dans les angles du tétraèdre initial. On remarque que ces 4 nouveaux tétraèdres sont homothétiques de l'initial. Ils conservent donc la même qualité.
+
+.. image:: ../images/dec_tetr_2.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 2
+   :width: 201
+   :height: 159
+
+Il reste au coeur du tétraèdre, un bloc qui a la forme de deux pyramides accolées par leur base. On crée une arête avec l'une des 3 diagonales possibles, puis les 4 faces qui contiennent cette arête et deux arêtes extérieures.
+
+.. image:: ../images/dec_tetr_3.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 3
+   :width: 244
+   :height: 74
+
+Cela produit 4 nouveaux tétraèdres. On notera qu'ils sont semblables deux à deux, mais qu'ils ne peuvent jamais être semblables au tétraèdre initial. Ils ne pourront donc jamais avoir la même qualité que lui. Toutefois, selon le choix
+de la diagonale qui a servi à la découpe du bloc pyramidal interne, le résultat
+n'est pas le même. On montre que le meilleur choix, en terme de qualité, est celui
+de la plus petite des trois diagonales possibles.
+
+.. image:: ../images/dec_tetr_4.gif
+   :align: center
+   :alt: Découpage standard d'un tétraèdre - 4
+   :width: 229
+   :height: 116
+
+Le découpage des hexaèdres se fait en huit. Chacune des faces quadrangulaires est découpée en 4 faces quadrangulaires. 3 faces internes à l'hexaèdre sont créées, puis chacune est découpée en 4. Cette construction crée 6 points supplémentaires au centre de chaque face externe et un point supplémentaire à l'intérieur de l'hexaèdre.
+
+.. image:: ../images/dec_hex.png
+   :align: center
+   :alt: Découpage standard d'un hexaèdre
+   :width: 600
+
+Le découpage des pentaèdres se fait en huit. Chacune des faces quadrangulaires est découpée en 4 faces quadrangulaires de manière standard, de même pour les faces triangulaires. On construit trois arêtes internes chacune parallèle à une des faces quadrangulaires au milieu du penatèdre. On construit ensuite 4 faces triangulaires s'appuyant sur ces arêtes et correspondant au découpage standard d'une face triangulaire à l'intérieur du pentaèdre. Six faces quadrangulaires internes sont créées deux à deux parallèles à chaque face quadrangulaire du pentaèdre.
+
+.. image:: ../images/dec.pent.png
+   :align: center
+   :alt: Découpage standard d'un pentaèdre
+   :width: 600
+
+Le découpage de mise en conformité
+==================================
+
+Le découpage de mise en conformité s'appliquent aux mailles à l'interface entre deux niveaux de raffinement différent.
+Ces découpages produisent des mailles de qualité moindre par rapport aux mailles et on voit dans l'algorithme général comment cet inconvénient est pris en compte pour en minimiser les conséquences.
+
+Etant donné notre algorithme de maillage adaptatif, seules les quatre situations suivantes peuvent être rencontrées :
+
+Dans le cas d'un triangle, l'une de ses trois arêtes est coupée en deux. On joint son milieu au sommet opposé pour former deux nouveaux triangles.
+
+.. image:: ../images/dec_tria_2.png
+   :align: center
+   :alt: Découpage de conformité d'un triangle
+   :width: 424
+
+Dans le cas d'un quadrangle, trois cas de figure sont possibles. Dans le premier cas, l'une de ses quatre arêtes est coupée en deux. On joint son milieu aux deux sommets opposés pour former trois triangles. Le maillage adapté obtenu est donc mixte : il comportera des triangles en plus des quadrangles de départ.
+
+.. image:: ../images/dec_quad_2.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle - 1
+   :width: 424
+
+Pour un quadrangle où deux arêtes opposées sont coupées en deux, les deux milieux d'arêtes opposées sont reliés. Il y a création de deux quadrangles.
+
+.. image:: ../images/dec_quad_3.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle - 2
+   :width: 424
+
+Pour un quadrangle où deux arêtes adjacentes sont coupées en deux, on crée un nouveau noeud au milieu du quadrangle. Ce noeud milieu est relié aux deux milieux des arêtes coupées et au sommet opposé. Il y a création de trois quadrangles.
+
+.. image:: ../images/dec_quad_4.png
+   :align: center
+   :alt: Découpage de conformité d'un quadrangle - 3
+   :width: 424
+
+Pour un tétraèdre dont trois des arêtes sont coupées : cela n'est possible que si ces arêtes sont sur la même face. Cette face est donc coupée en quatre. On joint les milieux des arêtes découpées au sommet opposé. Cela coupe en deux les trois autres faces et il y a création de 4 tétraèdres.
+
+.. image:: ../images/dec_tetr_5.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 1
+   :width: 116
+   :height: 116
+
+Pour un tétraèdre dont deux des arêtes sont coupées : cela n'est possible que si ces arêtes sont opposées. On fait toutes les jonctions entre les milieux de ces arêtes et les autres sommets, ainsi que entre les deux milieux d'arêtes. Les quatre faces sont coupées en deux et il y a création de 4 tétraèdres.
+
+.. image:: ../images/dec_tetr_6.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 2
+   :width: 116
+   :height: 116
+
+Pour un tétraèdre dont une des arêtes est coupée : on joint le milieu de cette arête découpée au sommet opposé et il y a création de 2 tétraèdres.
+
+.. image:: ../images/dec_tetr_7.gif
+   :align: center
+   :alt: Découpage de conformité d'un tétraèdre - 3
+   :width: 116
+   :height: 116
+
+La conformité des hexaèdres est assurée par des combinaisons de tétraèdres et de pyramides. Les situations dépendent du nombre de non-conformités, en respectant les règles de découpage des quadrangles. Voici quelques exemples pris parmi les 66 configurations possibles.
+
+Pour un hexaèdre dont une face est coupée il y a création de 4 arêtes, de 4 tétraèdres et de 5 pyramides.
+
+.. image:: ../images/hexaface.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 1 face
+   :width: 384
+   :height: 101
+
+Pour un hexaèdre dont une seule arête est coupée il y a création de deux arêtes et de 4 pyramides.
+
+.. image:: ../images/hexa1arete.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 1 arête
+   :width: 384
+   :height: 101
+
+Pour un hexaèdre dont deux arêtes sont coupées il y a création  d'un point central, de 10 arêtes, de 12 tétraèdres et de 2 pyramides.
+
+.. image:: ../images/hexa2aretes.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 2 arêtes
+   :width: 384
+   :height: 101
+
+Pour un hexaèdre dont trois arêtes sont coupées il y a création  d'un point central, de 11 arêtes et de 18 tétraèdres.
+
+.. image:: ../images/hexa3aretes.png
+   :align: center
+   :alt: Découpage de conformité d'un hexaèdre - 3 arêtes
+   :width: 384
+   :height: 101
+
+
+
+L'algorithme
+************
+.. index:: single: algorithme
+
+La stratégie retenue dans les algorithmes d'HOMARD consiste à forcer le découpage en quatre pour toutes les faces triangulaires ou quadrangulaires présentant deux points de non conformité. A la fin, les seuls triangles ou quadrangles présentant des points de non conformité sont des faces où une arête et une seule est découpée. La mise en conformité est
+alors assurée par la solution la plus simple possible comme vu ci-avant.
+Cette dernière étape de mise en conformité introduit des mailles dont la qualité peut être plus faible que celle
+des mailles dont elles sont issues. Cet inconvénient est contrôlé car nous avons choisi de donner un statut temporaire
+à ces mailles de mise en conformité : elles sont présentes pour produire un maillage acceptable par les logiciels
+de calcul, mais disparaissent s'il y a besoin de les découper ultérieurement.
+Ainsi, la modification de qualité ne se propage pas au fil des itérations d'adaptation de maillage et reste limitée autant en valeur qu'en nombre de mailles concernées.
+
+L'algorithme général est donc le suivant :
+
+    * Transfert des indications de raffinement ou de déraffinement des mailles en décisions de découpage ou de regroupement d'arêtes, de triangles et de quadrangles.
+    * Suppression des mailles temporaires de mise en conformité.
+    * Par examen de tous les triangles et quadrangles du niveau de découpage le plus haut vers le niveau le plus bas, règlement des conflits sur le raffinement au moyen des règles de base.
+    * Par examen de tous les triangles et quadrangles du niveau de découpage le plus bas vers le niveau le plus haut, règlement des conflits sur le déraffinement au moyen des règles de base.
+    * Création effective du nouveau maillage : découpage standard, suivi de mise en conformité.
+
+
+Quelques illustrations de maillage adaptés
+******************************************
+.. index:: single: illustration
+
+On pourra trouver des exemples d'utilisations de l'adaptation de maillage sur le site de `HOMARD <http://www.code-aster.org/outils/homard/fr/applications.html>`_.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. image:: ../images/intro_3.png                              |
+|    :alt: Bride                                                |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_4.png                              |
+|    :alt: Goupille                                             |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_5.png                              |
+|    :align: center                                             |
+|    :alt: Hexaèdre en non conforme                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_6.png                              |
+|    :alt: Tétraèdre                                            |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_7.png                              |
+|    :alt: Hexaèdre en conforme                                 |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_8.gif                              |
+|    :alt: Propagation en 2D                                    |
+|    :align: center                                             |
++---------------------------------------------------------------+
+| .. image:: ../images/intro_9.2.png                            |
+|    :alt: Niveau 2 de raffinement                              |
+|    :align: center                                             |
+|    :scale: 80                                                 |
+| .. image:: ../images/intro_9.3.png                            |
+|    :alt: Niveau 3 de raffinement                              |
+|    :align: center                                             |
+|    :scale: 80                                                 |
+| .. image:: ../images/intro_9.4.png                            |
+|    :alt: Niveau 4 de raffinement                              |
+|    :align: center                                             |
+|    :scale: 80                                                 |
++---------------------------------------------------------------+
+
diff --git a/doc/fr/preferences.rst b/doc/fr/preferences.rst
new file mode 100644 (file)
index 0000000..e4a72bf
--- /dev/null
@@ -0,0 +1,30 @@
+.. _preferences:
+
+Les préférences
+###############
+.. index:: single: préférences
+
+Un certain nombre de choix par défaut pour le module HOMARD sont définis dans les préférences.
+
+
+La langue
+*********
+La langue choisie dans les préférences générales de SALOME est celle qui est utilisée dans les menus de l'interface graphique.
+
+Si le français est retenu, les messages émis par HOMARD le sont en français. Dans tous les autres cas, ils sont en anglais.
+
+Publication des maillages
+*************************
+.. index:: single: publication
+
+.. image:: images/preferences_1.png
+   :align: center
+
+Par défaut, les maillages lus à la création d'un cas ou produits après une adaptation ne sont pas publiés dans SMESH. Ce choix est modifiable en cochant cette préférence.
+
+
+
+
+
+
+
diff --git a/doc/fr/regles.rst b/doc/fr/regles.rst
new file mode 100644 (file)
index 0000000..a0ac4e6
--- /dev/null
@@ -0,0 +1,108 @@
+.. _regles:
+
+Règles
+######
+
+Quel que soit le mode d'utilisation retenu, des règles générales sont à suivre dans la constitution des données. Elles sont détaillées ici.
+
+Le maillage initial
+*******************
+.. index:: single: maillage;initial
+
+Le maillage comporte des noeuds, des mailles-points, des segments, des triangles, des quadrangles, des tétraèdres, des hexaèdres et/ou des pentaèdres. Il peut être de degré 1 ou 2. Il peut être en plusieurs morceaux, non connexe.
+On peut tout à fait traiter des maillages qui mêlent des zones maillées en volume, et des zones maillées en surfaces. Ces zones peuvent être adjacentes ou non.
+Au cours du processus de raffinement, il n'y a pas de régularisation du maillage. Il faut donc veiller à ce que le maillage initial soit le plus régulier possible. Un mauvais maillage initial produira de mauvais maillages découpés. En revanche, ce maillage initial peut être grossier. Il suffit qu'il respecte a minima les conditions initiales.
+Enfin, il est souhaitable de posséder dès le départ une bonne représentation des frontières courbes. Le découpage des mailles de bord se faisant sur l'approximation de la frontière par le maillage initial, il n'y aura pas toujours un suivi très fin de courbes accentuées. Néanmoins, pour remédier à cela, un module spécifique de suivi de frontières 1D ou 2D est disponible.
+
+Les conditions aux limites et les sources
+*****************************************
+.. index:: single: conditions aux limites
+
+La définition des endroits où s'appliquent des conditions aux limites ou des termes source doit être faite sur des entités de même dimension que le phénomène représenté. En clair, cela signifie qu'un chargement ponctuel sera défini sur un noeud. Dans un calcul 2D, la définition des comportements sur les bords se fera par des caractérisations des segments de bord et non pas par les noeuds de bords. De même en 3D, les comportements sur les parois externes du domaine à modéliser sont établis sur les triangles ou les quadrangles qui constituent ce bord. En procédant ainsi, on est sûr de propager correctement ces définitions au fil des raffinements de maillage.
+
+Il ne faut surtout pas définir les conditions aux limites par les noeuds, sinon il est impossible de représenter correctement les frontières après adaptation. Cela va être démontré sur l'exemple suivant.
+
+.. image:: ../images/cl_0.gif
+   :align: center
+   :width: 201
+   :height: 110
+
+On veut modéliser ici un cas de mécanique des fluides pour lequel un écoulement entre puis sort d'une cavité. Le modèle est bidimensionnel et, classiquement, on définit les conditions aux limites par des caractérisation des noeuds. Sur le zoom dessiné ci-dessous, on a les noeuds rouges pour la paroi et les noeuds bleus pour l'entrée, les noeuds noirs étant des noeuds libres.
+
+.. image:: ../images/cl_1.gif
+   :align: center
+   :width: 372
+   :height: 119
+
+S'il s'avère que le maillage a besoin de découpage autour de la zone d'entrée, il va y avoir création de nouveaux noeuds. Tout le problème va consister à savoir à quelle catégorie appartient un nouveau noeud situé entre un noeud de paroi ou un noeud d'entrée. Si, comme sur le schéma de gauche, on privilégie la paroi, tout va bien. En revanche si, comme sur le schéma de droite, on privilégie l'entrée, il y a un problème : cela revient à agrandir artificiellement l'entrée ... et donc à fausser le calcul !
+
+|cl_2| Paroi ------------------------------ Entrée |cl_3|
+
+.. |cl_2| image:: ../images/cl_2.gif
+   :align: middle
+   :width: 244
+   :height: 129
+
+
+.. |cl_3| image:: ../images/cl_3.gif
+   :align: middle
+   :width: 244
+   :height: 128
+
+Gérer les priorités entre les informations devient très rapidement impossible : il faudrait établir des conventions uniques pour tous les logiciels de calcul associés à HOMARD et traiter une combinaison importante de possibilités. Qui plus est, en 3D, cette technique de gestion de priorités aboutit à des impasses. Essayez d'imaginer la mise à jour des caractérisations des noeuds issus du découpage des tétraèdres dans l'angle de ce domaine. Très rapidement, il devient impossible de trancher entre le bleu, le rouge ou le vert.
+
+.. image:: ../images/cl_4.gif
+   :align: center
+   :width: 470
+   :height: 201
+
+La seule solution viable consiste à définir les conditions aux limites sur les mailles de bord. Pour reprendre notre exemple 2D en mécanique des fluides, on donne les caractéristiques paroi ou entrée aux arêtes de bord. Dans le logiciel de calcul, le programme saura transférer très facilement des arêtes vers les sommets frontaliers.
+
+.. image:: ../images/cl_5.gif
+   :align: center
+   :width: 372
+   :height: 119
+
+Si le raffinement du maillage a lieu comme précédemment, les nouvelles arêtes prennent la même caractérisation que celles dont elles sont issues : une arête de paroi découpée donne naissance à deux arêtes de paroi et une arête d'entrée découpée donne naissance à deux arêtes d'entrée. De ce fait, le logiciel de calcul n'a aucune difficulté à établir les bonnes informations sur les noeuds frontaliers.
+
+.. image:: ../images/cl_6.gif
+   :align: center
+   :width: 244
+   :height: 129
+
+La stratégie d'adaptation
+*************************
+
+On a le choix entre plusieurs types de raffinement et de déraffinement :
+
+    * en filtrant les indications d'erreur par des seuils prédéfinis : toutes les mailles qui portent une erreur supérieure à un seuil haut sont découpées et toutes celles pour lesquelles l'erreur est inférieure à un seuil bas sont déraffinées. Ensuite, d'autres découpages interviennent jusqu'à ce que le maillage soit conforme.
+    * en filtrant les indications d'erreur par des seuils dépendant de la répartition de l'erreur : toutes les mailles qui portent une erreur supérieure à un décalage par rapport à la moyenne sont raffinées. Ensuite, d'autres découpages interviennent jusqu'à ce que le maillage soit conforme.
+    * en filtrant avec des pourcentages de mailles : on découpe les x% de mailles à la plus forte erreur et on déraffine les y% à la plus faible erreur.
+    * en n'utilisant que la fonction de raffinement, avec filtrage par rapport à un seuil haut.
+    * inversement, en n'utilisant que la fonction de déraffinement, avec filtrage par rapport à un seuil bas.
+    * raffinement uniforme ; on ne tient compte d'aucun indicateur d'erreur et le maillage est découpé intégralement : chaque triangle est découpé en 4, chaque quadrangle est découpé en 4, chaque tétraèdre est découpé en 8, chaque pentaèdre est découpé en 8 et chaque hexaèdre est découpé en 8. Attention, le volume du maillage résultat peut être énorme ...
+
+L'indicateur d'erreur
+*********************
+.. index:: single: indicateur d'erreur
+
+La plupart du temps, l'indicateur d'erreur est un champ de valeurs réelles définis par maille. C'est un des résultats du logiciel de calcul. La sélection des mailles à découper se fait par comparaison de la valeur de l'indicateur et d'un seuil donné.
+Par rapport à ce standard, HOMARD accepte deux extensions : un indicateur d'erreur exprimé par noeud et/ou un indicateur d'erreur sous forme entière. Quand l'indicateur est fourni par noeud, HOMARD attribue à chaque maille la plus grande valeur d'erreur trouvée sur les noeuds de la maille. Quand l'indicateur est sous forme entière, la convention retenue est que 1 correspond à une demande de raffinement, -1 correspond à une demande de déraffinement et 0 correspond à ne rien faire.
+On n'est pas obligé de fournir une valeur sur chaque maille : si des mailles ne sont associées à aucune valeur, HOMARD leur attribuera une décision par défaut selon les préférences retenues.
+
+L'interpolation des champs
+**************************
+.. index:: single: interpolation
+.. index:: single: champ
+
+HOMARD sait mettre à jour des champs exprimés sur le maillage. Deux cas de figure sont possibles :
+
+    * Si le champ se présente sous la forme d'un champ aux noeuds, HOMARD produira un nouveau champ aux noeuds avec la méthode suivante. Pour un noeud présent dans les deux maillages, avant et après adaptation, la valeur du champ est gardée telle quelle. Pour un nouveau noeud, la valeur du champ est obtenue en fonction des valeurs sur les noeuds les plus proches par interpolation P1, P2 ou iso-P2 selon le degré du maillage et le choix retenu.
+    * Si le champ se présente sous la forme d'un champ constant par maille, HOMARD produira un nouveau champ constant par maille. La méthode dépend du caractère du champ : intensif, comme une masse volumique, ou extensif, comme une masse. Pour une maille présente dans les deux maillages, avant et après adaptation, la valeur du champ est gardée telle quelle. Pour une maille issue d'un découpage, la valeur du champ est celle du champ sur la maille mère pour le cas intensif ; c'est la valeur du champ proportionnelle aux volumes des mailles mère et fille pour le cas extensif. Pour une maille issue d'un regroupement après déraffinement, la valeur du champ est la moyenne des valeurs du champ sur les anciennes mailles filles pour le cas intensif ; c'est la somme des valeurs du champ sur les anciennes mailles filles pour le cas extensif.
+
+Ces techniques de mise à jour sont basées sur des champs scalaires. Si un champ vectoriel est transmis à HOMARD par les fichiers MED, chaque composante sera traitée comme un scalaire indépendant. Ensuite, le nouveau vecteur est reconstruit en rassemblant toutes ses composantes.
+
+
+
+
+
diff --git a/doc/fr/tui_create_boundary.rst b/doc/fr/tui_create_boundary.rst
new file mode 100644 (file)
index 0000000..6b96376
--- /dev/null
@@ -0,0 +1,183 @@
+.. _tui_create_boundary:
+
+La frontière
+############
+
+.. index:: single: boundary
+.. index:: single: frontière
+.. index:: single: cylindre
+.. index:: single: sphere
+
+Les variables sont décrites dans :doc:`gui_create_boundary`.
+
+Méthodes de la classe homard
+****************************
+Ces méthodes retournent une instance de la classe boundary.
+
++----------------------------------------------------------------------------------------+
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryDi                                                           |
+|                                                                                        |
+| **CreateBoundaryDi(boundary_name, mesh_name, mesh_file)**                              |
+|     Retourne une instance de la classe ``boundary`` de type discret après sa création  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière discrète                              |
+|     - ``mesh_name`` : le nom du maillage de la frontière                               |
+|     - ``mesh_file`` : le nom du fichier contenant ce maillage                          |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryCylinder                                                     |
+|                                                                                        |
+| **CreateBoundaryCylinder(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, R)**       |
+|     Retourne une instance de la classe ``boundary`` analytique de type cylindrique     |
+|     après sa création                                                                  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière analytique basée sur un cylindre      |
+|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées d'un point sur l'axe du cylindre      |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                                  |
+|     - ``R`` : rayon du cylindre                                                        |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundarySphere                                                       |
+|                                                                                        |
+| **CreateBoundarySphere(boundary_name, Xcen, Ycen, Zcen, R)**                           |
+|     Retourne une instance de la classe ``boundary`` analytique de type sphérique       |
+|     après sa création                                                                  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière analytique basée sur une sphere       |
+|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère                |
+|     - ``R`` : rayon de la sphère                                                       |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryConeA                                                        |
+|                                                                                        |
+| **CreateBoundaryConeA(boundary_name, Xaxe, Yaxe, Zaxe, Angle, Xcen, Ycen, Zcen)**      |
+|     Retourne une instance de la classe ``boundary`` analytique de type conique         |
+|     après sa création                                                                  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière analytique basée sur un cône          |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe (non nécessairement normé)       |
+|     - ``Angle`` : angle d'ouverture du cône en degre (entre 0 et 90)                   |
+|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre du cône                     |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryConeR                                                        |
+|                                                                                        |
+| **CreateBoundaryConeR(boundary_name, Xc1, Yc1, Zc1, R1, Xc2, Yc2, Zc2, R2)**           |
+|     Retourne une instance de la classe ``boundary`` analytique de type conique         |
+|     après sa création                                                                  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière analytique basée sur un cône          |
+|     - ``Xc1``, ``Yc1``, ``Zc1`` : coordonnées du premier centre du cône                |
+|     - ``R1`` : rayon du cône à la hauteur du premier centre                            |
+|     - ``Xc2``, ``Yc2``, ``Zc2`` : coordonnées du second centre du cône                 |
+|     - ``R2`` : rayon du cône à la hauteur du second centre                             |
++----------------------------------------------------------------------------------------+
+| .. module:: CreateBoundaryTorus                                                        |
+|                                                                                        |
+| **CreateBoundaryTorus(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, RRev, RPri)** |
+|     Retourne une instance de la classe ``boundary`` analytique de type torique         |
+|     après sa création                                                                  |
+|                                                                                        |
+|     - ``boundary_name`` : le nom de la frontière analytique basée sur un tore          |
+|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre du tore                     |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                                  |
+|     - ``RRev`` : rayon de révolution du tore                                           |
+|     - ``RPri`` : rayon primaire du tore                                                |
++----------------------------------------------------------------------------------------+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetBoundary                                       |
+|                                                               |
+| **GetBoundary(boundary_name)**                                |
+|     Retourne l'instance de la classe ``boundary`` connue par  |
+|     son nom                                                   |
+|                                                               |
+|     - ``boundary_name`` : le nom de la frontière              |
++---------------------------------------------------------------+
+| .. module:: GetAllBoundarysName                               |
+|                                                               |
+| **GetAllBoundarysName()**                                     |
+|     Retourne la liste des noms de toutes les frontières       |
+|     existantes                                                |
+|                                                               |
++---------------------------------------------------------------+
+
+Méthodes de la classe cas
+*************************
+Voir également dans :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddBoundaryGroup                                  |
+|                                                               |
+| **AddBoundaryGroup(boundary, group)**                         |
+|     Ajoute une frontière à la définition du cas               |
+|                                                               |
+|     - ``boundary`` : nom d'une frontière courbe à suivre      |
+|                                                               |
+|     Pour une frontière discrète :                             |
+|                                                               |
+|     . si toutes les lignes courbes sont suivies, le second    |
+|     argument est une chaîne vide.                             |
+|                                                               |
+|     . si seulement certaines lignes courbes sont suivies,     |
+|     ``group`` est le nom d'un groupe de segments à suivre.    |
+|                                                               |
+|     Pour une frontière analytique :                           |
+|                                                               |
+|     - ``group`` : nom d'un groupe de faces placées sur la     |
+|       frontière                                               |
++---------------------------------------------------------------+
+
+Méthodes de la classe boundary
+******************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom de la frontière                           |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Retourne le type de la frontière :                        |
+|                                                               |
+|         * 0 : discrète                                        |
+|         * 1 : cylindre                                        |
+|         * 2 : sphère                                          |
+|         * 3 : cône défini par un axe et un angle              |
+|         * 4 : cône défini par deux rayons                     |
+|         * 5 : tore                                            |
++---------------------------------------------------------------+
+| .. module:: GetCoords                                         |
+|                                                               |
+| **GetCoords()**                                               |
+|     Retourne un tableau contenant les coordonnées de la       |
+|     frontière dans l'ordre d'entrée dans le CreateBoundaryXXXX|
+|     associé                                                   |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Detruit la frontière.                                     |
+|     Pour une frontière discrète, le fichier du maillage       |
+|     associé est conservé.                                     |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+Création d'une frontière discrète, d'une frontière sphèrique, puis d'une frontière cylindrique : ::
+
+    inter = homard.CreateBoundaryDi("INTERSECTION", 'PIQUAGE', dircase+'/tutorial_4.fr.med')
+    fron_1 = homard.CreateBoundarySphere("FRON_1", 12.3, 3.4, .56, 6.5)
+    fron_2 = homard.CreateBoundaryCylinder('CYL_1', 0.0, 25., -25., 25., 50., 75., 100.)
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_boundary`
diff --git a/doc/fr/tui_create_case.rst b/doc/fr/tui_create_case.rst
new file mode 100644 (file)
index 0000000..a795348
--- /dev/null
@@ -0,0 +1,286 @@
+.. _tui_create_case:
+
+Le cas
+######
+.. index:: single: cas
+.. index:: single: type de conformité
+.. index:: single: maillage;initial
+
+Les variables sont décrites dans :doc:`gui_create_case`.
+
+Méthodes de la classe homard
+****************************
+
+Création d'un cas
+=================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateCase                                        |
+|                                                               |
+| **CreateCase(case_name, mesh_name, mesh_file)**               |
+|     Retourne une instance de la classe ``cas`` après sa       |
+|     création                                                  |
+|                                                               |
+|     - ``case_name`` : le nom du cas                           |
+|     - ``mesh_name`` : le nom du maillage initial              |
+|     - ``mesh_file`` : le nom du fichier MED contenant ce      |
+|       ce maillage                                             |
+|                                                               |
+| Par défaut :                                                  |
+|                                                               |
+|  * le répertoire des résultats est ``/tmp``                   |
+|  * l'adaptation est conforme                                  |
++---------------------------------------------------------------+
+| .. module:: GetCase                                           |
+|                                                               |
+| **GetCase(case_name)**                                        |
+|     Retourne l'instance de la classe ``cas`` connue par       |
+|     son nom                                                   |
+|                                                               |
+|     - ``case_name`` : le nom du cas                           |
++---------------------------------------------------------------+
+| .. module:: GetAllCasesName                                   |
+|                                                               |
+| **GetAllCasesName()**                                         |
+|     Retourne la liste des noms de tous les cas existant       |
+|                                                               |
++---------------------------------------------------------------+
+
+Création d'un cas par poursuite d'une itération calculée
+========================================================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromIteration                           |
+|                                                               |
+| **CreateCaseFromIteration(case_name, dir_name)**              |
+|     Retourne une instance de la classe ``cas`` après sa       |
+|     création                                                  |
+|                                                               |
+|     - ``case_name`` : le nom du cas                           |
+|     - ``dir_name``  : le nom du répertoire contenant          |
+|       l'itération à poursuivre                                |
+|                                                               |
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromCaseLastIteration                   |
+|                                                               |
+| **CreateCaseFromCaseLastIteration(case_name, dir_name)**      |
+|     Retourne une instance de la classe ``cas`` après sa       |
+|     création                                                  |
+|                                                               |
+|     - ``case_name`` : le nom du cas                           |
+|     - ``dir_name``  : le nom du répertoire contenant          |
+|       le cas à poursuivre                                     |
+|                                                               |
++---------------------------------------------------------------+
+| .. module:: CreateCaseFromCaseIteration                       |
+|                                                               |
+| **CreateCaseFromCaseIteration(case_name, dir_name, number)**  |
+|     Retourne une instance de la classe ``cas`` après sa       |
+|     création                                                  |
+|                                                               |
+|     - ``case_name`` : le nom du cas                           |
+|     - ``dir_name``  : le nom du répertoire contenant          |
+|       le cas à poursuivre                                     |
+|     - ``number`` : le numéro de l'itération du cas            |
+|                                                               |
++---------------------------------------------------------------+
+
+
+
+Méthodes de la classe cas
+*************************
+.. index:: single: YACS
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom du cas                                    |
++---------------------------------------------------------------+
+| .. module:: SetDirName                                        |
+|                                                               |
+| **SetDirName(dirname)**                                       |
+|     Affecte le répertoire des résutats associé au cas. Cela ne|
+|     peut se faire qu'après la création du cas et avant le     |
+|     premier calcul.                                           |
+|                                                               |
+|     - ``dirname`` : le nom du répertoire des résutats         |
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Retourne le nom du répertoire des résutats associé au cas |
++---------------------------------------------------------------+
+| .. module:: SetConfType                                       |
+|                                                               |
+| **SetConfType(conf_type)**                                    |
+|     Définit le mode de conformité associé au cas              |
+|                                                               |
+|     - ``conf_type`` : entier précisant le mode de conformité  |
+|                                                               |
+|         * 0 : conforme (défaut)                               |
+|         * 1 : non conforme avec au minimum 2 aretes coupees   |
+|         * 2 : non conforme avec 1 noeud par arete de maille   |
+|         * 3 : non conforme quelconque                         |
+|         * -1 : conforme avec des boites (pas d'escalier)      |
+|         * -2 : non-conforme avec des boites (pas d'escalier)  |
++---------------------------------------------------------------+
+| .. module:: GetConfType                                       |
+|                                                               |
+| **GetConfType()**                                             |
+|     Retourne le type de conformité                            |
++---------------------------------------------------------------+
+| .. module:: SetExtType                                        |
+|                                                               |
+| **SetExtType(ext_type)**                                      |
+|     Définit le type externe associé au cas                    |
+|                                                               |
+|     - ``ext_type`` : entier précisant le type externe         |
+|                                                               |
+|         * 0 : MED standard (défaut)                           |
+|         * 1 : Saturne MED                                     |
+|         * 2 : Saturne 2D MED                                  |
++---------------------------------------------------------------+
+| .. module:: GetExtType                                        |
+|                                                               |
+| **GetExtType()**                                              |
+|     Retourne le type externe associé au cas                   |
++---------------------------------------------------------------+
+| .. module:: GetIter0                                          |
+|                                                               |
+| **GetIter0()**                                                |
+|     Retourne l'itération associée au maillage initial.        |
+|     Cette itération est créée automatiquement par le module   |
+|     HOMARD et est utilisée pour enchaîner les adaptations.    |
+|     Elle correspond à un maillage initial ou à une itération  |
+|     de poursuite d'un cas précédent.                          |
++---------------------------------------------------------------+
+| .. module:: AddBoundaryGroup                                  |
+|                                                               |
+| **AddBoundaryGroup(boundary, group)**                         |
+|     Ajoute une frontière à la définition du cas               |
+|                                                               |
+|     - ``boundary`` : nom d'une frontière courbe à suivre      |
+|                                                               |
+|     Pour une frontière discrète :                             |
+|                                                               |
+|     . si toutes les lignes courbes sont suivies, le second    |
+|       argument est une chaîne vide.                           |
+|     . si seulement certaines lignes courbes sont suivies,     |
+|       ``group`` est le nom d'un groupe de segments à suivre.  |
+|                                                               |
+|     Pour une frontière analytique :                           |
+|                                                               |
+|     - ``group`` : nom d'un groupe de faces placées sur la     |
+|       frontière                                               |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Detruit le cas et toutes les itérations associées. Le     |
+|     fichier du maillage initial associé est conservé.         |
+|                                                               |
+|     - ``option`` : un entier précisant ce qui est fait des    |
+|       fichiers de maillage associés                           |
+|                                                               |
+|         * 0 : les fichiers sont conservés                     |
+|         * 1 : les fichiers sont supprimés                     |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+| .. module:: GetState                                          |
+|                                                               |
+| **GetState()**                                                |
+|     Retourne l'état du cas :                                  |
+|         * 0 : correspond à un maillage initial                |
+|         * autre valeur : poursuite d'une itération de numéro n|
++---------------------------------------------------------------+
+| .. module:: CreateYACSSchema                                  |
+|                                                               |
+| **CreateYACSSchema(yacs_name, ScriptFile, DirName, MeshFile)**|
+|     Retourne une instance de la classe ``yacs`` après sa      |
+|     création                                                  |
+|                                                               |
+|     - ``yacs_name`` : le nom du schéma                        |
+|     - ``ScriptFile`` : le fichier du script python qui permet |
+|       de lancer le calcul à coupler avec l'adaptation de      |
+|       maillage                                                |
+|     - ``DirName`` : le répertoire où a lieu le calcul         |
+|     - ``MeshFile`` : le fichier MED contenant le tout premier |
+|       maillage de calcul                                      |
++---------------------------------------------------------------+
+
+Les options avancées
+====================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetPyram                                          |
+|                                                               |
+| **SetPyram(option)**                                          |
+|     Définit le statut des pyramides pour le cas               |
+|                                                               |
+|     - ``option`` : entier précisant le statut des pyramides   |
+|       éventuellement présentes dans le maillage initial       |
+|                                                               |
+|         * 0 : pyramides refusées (défaut)                     |
+|         * 1 : pyramides autorisées                            |
++---------------------------------------------------------------+
+| .. module:: GetPyram                                          |
+|                                                               |
+| **GetPyram()**                                                |
+|     Retourne le statut accordé aux pyramides éventuellement   |
+|     présentes dans le maillage initial                        |
++---------------------------------------------------------------+
+
+Informations sur le maillage initial
+====================================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: MeshInfo                                          |
+|                                                               |
+| **MeshInfo(Qual, Diam, Conn, Tail, Inte)**                    |
+|     Donne des informations sur le maillage. Pour chaque       |
+|     option, le choix 0 correspond à ne rien faire, alors que  |
+|     le choix 1 active l'option.                               |
+|                                                               |
+|     - ``Qual`` : qualité des mailles                          |
+|     - ``Diam`` : diamètre des mailles                         |
+|     - ``Conn`` : connexité du domaine ; en un seul morceau,   |
+|       combien de trous, etc.                                  |
+|     - ``Tail`` : tailles des constituants du domaine, groupe  |
+|       par groupe                                              |
+|     - ``Inte`` : interpénétration des mailles, par dimension  |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+La création de l'objet case_1 se fait ainsi : ::
+
+    case_name = "CAS_1"
+    mesh_name = "MAILL"
+    mesh_file = "/home/A1789/Adapt/m0.med"
+    case_1 = homard.CreateCase(case_name, mesh_name, mesh_file)
+    dirname = "/home/A1789/Adapt/resu"
+    case_1.SetDirName(dirname)
+    case_1.SetConfType(1)
+    case_1.SetExtType(0)
+    case_1.AddBoundaryGroup( 'intersection', '' )
+    case_1.AddBoundaryGroup( 'cyl_1', 'T1_EXT' )
+    case_1.AddBoundaryGroup( 'cyl_1', 'T2_EXT' )
+    case_1.AddBoundaryGroup( 'cyl_2', 'T_INT' )
+
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_case`
+
+
diff --git a/doc/fr/tui_create_hypothese.rst b/doc/fr/tui_create_hypothese.rst
new file mode 100644 (file)
index 0000000..d048cbb
--- /dev/null
@@ -0,0 +1,458 @@
+.. _tui_create_hypothese:
+
+L'hypothèse
+###########
+
+.. index:: single: itération
+.. index:: single: hypothèse
+.. index:: single: zone
+
+Les variables sont décrites dans :doc:`gui_create_hypothese`.
+
+Méthodes de la classe homard
+****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateHypothesis                                  |
+|                                                               |
+| **CreateHypothesis(hypo_name)**                               |
+|     Retourne une instance de la classe ``hypothese``          |
+|                                                               |
+|     - ``hypo_name`` : le nom de l'hypothèse                   |
++---------------------------------------------------------------+
+| .. module:: GetHypothesis                                     |
+|                                                               |
+| **GetHypothesis(hypo_name)**                                  |
+|     Retourne l'instance de la classe ``hypothese`` connue par |
+|     son nom                                                   |
+|                                                               |
+|     - ``hypo_name`` : le nom de l'hypothèse                   |
++---------------------------------------------------------------+
+| .. module:: GetAllHypothesesName                              |
+|                                                               |
+| **GetAllHypothesesName()**                                    |
+|     Retourne la liste des noms de toutes les hypothèses créées|
++---------------------------------------------------------------+
+| .. module:: GetZone                                           |
+|                                                               |
+| **GetZone(zone_name)**                                        |
+|     Retourne l'instance de la classe ``zone`` connue par      |
+|     son nom                                                   |
+|                                                               |
+|     - ``zone_name`` : le nom de la zone                       |
++---------------------------------------------------------------+
+
+Méthodes de la classe hypothese
+*******************************
+
+Généralités
+===========
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom de l'hypothèse                            |
++---------------------------------------------------------------+
+| .. module:: GetAdapType                                       |
+|                                                               |
+| **GetAdapType()**                                             |
+|     Retourne le type d'adaptation                             |
+|                                                               |
+|         * -1 : uniforme                                       |
+|         * 0 : selon des zones                                 |
+|         * 1 : selon un champ                                  |
++---------------------------------------------------------------+
+| .. module:: GetRefinType                                      |
+|                                                               |
+| **GetRefinType()**                                            |
+|     Retourne le type de raffinement                           |
+|                                                               |
+|         * 0 : inactif                                         |
+|         * 1 : actif                                           |
++---------------------------------------------------------------+
+| .. module:: GetUnRefType                                      |
+|                                                               |
+| **GetUnRefType()**                                            |
+|     Retourne le type de déraffinement                         |
+|                                                               |
+|         * 0 : inactif                                         |
+|         * 1 : actif                                           |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Detruit l'hypothèse                                       |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+
+Adaptation uniforme
+===================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetUnifRefinUnRef                                 |
+|                                                               |
+| **SetUnifRefinUnRef(RefinUnRef)**                             |
+|     Définit un mode d'adaptation uniforme à tout le maillage  |
+|                                                               |
+|     - ``RefinUnRef`` : entier précisant le type d'adaptation  |
+|                                                               |
+|         * 1 : raffinement                                     |
+|         * -1 : déraffinement                                  |
++---------------------------------------------------------------+
+
+Adaptation selon un champ
+=========================
+
+Le champ de pilotage de l'adaptation et les seuils
+--------------------------------------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetField                                          |
+|                                                               |
+| **SetField(FieldName)**                                       |
+|     Attribue un nom de champ de pilotage à l'hypothèse        |
+|                                                               |
+|     - ``FieldName`` : le nom du champ  de pilotage            |
++---------------------------------------------------------------+
+| .. module:: GetFieldName                                      |
+|                                                               |
+| **GetFieldName()**                                            |
+|     Retourne le nom du champ de pilotage                      |
++---------------------------------------------------------------+
+| .. module:: SetUseField                                       |
+|                                                               |
+| **SetUseField(use_field)**                                    |
+|     Attribue un mode d'usage du champ de pilotage             |
+|                                                               |
+|     - ``use_field`` : entier précisant l'usage du champ       |
+|                                                               |
+|        * 0 : valeur par élément (défaut)                      |
+|        * 1 : saut entre un élément et ses voisins             |
++---------------------------------------------------------------+
+| .. module:: SetRefinThr                                       |
+|                                                               |
+| **SetRefinThr(type_thres, threshold)**                        |
+|     Définit les seuils en raffinement                         |
+|                                                               |
+|     - ``type_thres`` : entier précisant le type de seuil en   |
+|       raffinement                                             |
+|                                                               |
+|        * 1 : valeur absolue                                   |
+|        * 2 : valeur relative en %                             |
+|        * 3 : fraction des mailles en %                        |
+|        * 4 : moyenne + n fois l'écart-type                    |
+|                                                               |
+|     - ``threshold`` : valeur numérique entrant dans la        |
+|                       définition du seuil                     |
++---------------------------------------------------------------+
+| .. module:: GetRefinThrType                                   |
+|                                                               |
+| **GetRefinThrType()**                                         |
+|     Retourne le type de seuil de raffinement                  |
++---------------------------------------------------------------+
+| .. module:: SetUnRefThr                                       |
+|                                                               |
+| **SetUnRefThr(type_thres, threshold)**                        |
+|     Définit les seuils en déraffinement                       |
+|                                                               |
+|     - ``type_thres`` : entier précisant le type de seuil en   |
+|       déraffinement                                           |
+|                                                               |
+|        * 1 : valeur absolue                                   |
+|        * 2 : valeur relative en %                             |
+|        * 3 : fraction des mailles en %                        |
+|        * 4 : moyenne - n fois l'écart-type                    |
+|                                                               |
+|     - ``threshold`` : valeur du seuil                         |
++---------------------------------------------------------------+
+| .. module:: GetUnRefThrType                                   |
+|                                                               |
+| **GetUnRefThrType()**                                         |
+|     Retourne le type de seuil de déraffinement                |
++---------------------------------------------------------------+
+
+
+Les composantes du champ de pilotage
+------------------------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddComp                                           |
+|                                                               |
+| **AddComp(comp_name)**                                        |
+|     Ajoute une composante du champ de pilotage à considérer   |
+|                                                               |
+|     - ``comp_name`` : nom d'une composante à prendre en       |
+|       compte                                                  |
+|                                                               |
+|     Remarque : si cette méthode n'est pas appelée, par défaut |
+|     toutes les composantes seront retenues.                   |
++---------------------------------------------------------------+
+| .. module:: SetUseComp                                        |
+|                                                               |
+| **SetUseComp(use_comp)**                                      |
+|     Définit l'usage des composantes                           |
+|                                                               |
+|     - ``use_comp`` : entier précisant l'usage des composantes |
+|                                                               |
+|        * 0 : norme L2 (défaut)                                |
+|        * 1 : norme infinie                                    |
+|        * 2 : valeur relative, si une seule composante         |
++---------------------------------------------------------------+
+| .. module:: GetComps                                          |
+|                                                               |
+| **GetComps()**                                                |
+|     Retourne la liste des composantes utilisées               |
++---------------------------------------------------------------+
+| .. module:: SupprComp                                         |
+|                                                               |
+| **SupprComp(comp_name)**                                      |
+|     Supprime une composante du champ à considérer             |
+|                                                               |
+|     - ``comp_name`` : nom de la composante à supprimer        |
++---------------------------------------------------------------+
+| .. module:: SupprComps                                        |
+|                                                               |
+| **SupprComps()**                                              |
+|     Supprime toutes les composantes du champ à considérer     |
++---------------------------------------------------------------+
+
+
+Adaptation selon des zones
+==========================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddZone                                           |
+|                                                               |
+| **AddZone(zone_name, type_use)**                              |
+|                                                               |
+|     - ``zone_name`` : le nom de la zone à ajouter             |
+|     - ``type_use``  : entier précisant l'usage de la zone     |
+|                                                               |
+|         * 1 : raffinement                                     |
+|         * -1 : déraffinement                                  |
++---------------------------------------------------------------+
+| .. module:: GetZones                                          |
+|                                                               |
+| **GetZones()**                                                |
+|     Retourne la liste des zones utilisées avec leur usage.    |
+|                                                               |
+|     Attention : l'usage est stocké sous forme de chaîne de    |
+|     caractères et non pas d'entier dans la liste.             |
+|                                                               |
+|     Exemple : ['Zone_A', '1', 'Zone_B', '1', 'Zone_C', '1']   |
++---------------------------------------------------------------+
+| .. module:: SupprZone                                         |
+|                                                               |
+| **SupprZone(zone_name)**                                      |
+|     Supprime une zone de l'hypothèse                          |
+|                                                               |
+|     - ``zone_name`` : nom de la zone à supprimer              |
++---------------------------------------------------------------+
+| .. module:: SupprZones                                        |
+|                                                               |
+| **SupprZones()**                                              |
+|     Supprime toutes les zones de l'hypothèse                  |
++---------------------------------------------------------------+
+
+
+Le filtrage par les groupes
+===========================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: AddGroup                                          |
+|                                                               |
+| **AddGroup(group_name)**                                      |
+|     Ajoute un groupe au filtrage                              |
+|                                                               |
+|     - ``group_name`` : nom du groupe à prendre en compte      |
++---------------------------------------------------------------+
+| .. module:: GetGroups                                         |
+|                                                               |
+| **GetGroups()**                                               |
+|     Retourne la liste des groupes utilisés pour le filtrage   |
++---------------------------------------------------------------+
+
+
+Les champs à interpoler
+=======================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetTypeFieldInterp                                |
+|                                                               |
+| **SetTypeFieldInterp(typefieldinterp)**                       |
+|                                                               |
+|     - ``typefieldinterp`` : entier précisant si des champs    |
+|       sont a interpoler                                       |
+|                                                               |
+|         * 0 : aucun champ n'est à interpoler (défaut)         |
+|         * 1 : tous les champs sont interpolés                 |
+|         * 2 : certains champs sont interpolés ; implicitement |
+|           affecté après usage de AddFieldInterp ou            |
+|           AddFieldInterpType                                  |
++---------------------------------------------------------------+
+| .. module:: GetTypeFieldInterp                                |
+|                                                               |
+| **GetTypeFieldInterp()**                                      |
+|     Retourne l'entier précisant si des champs sont à          |
+|     interpoler                                                |
++---------------------------------------------------------------+
+| .. module:: AddFieldInterp                                    |
+|                                                               |
+| **AddFieldInterp(FieldName)**                                 |
+|                                                               |
+|     - ``FieldName`` : le nom du champ à interpoler            |
+|                                                               |
+|     Le mode d'interpolation sera choisi automatiquement par   |
+|     HOMARD ; cela correspond au mode 0 de AddFieldInterpType  |
++---------------------------------------------------------------+
+| .. module:: AddFieldInterpType                                |
+|                                                               |
+| **AddFieldInterpType(FieldName, type_interp)**                |
+|                                                               |
+|     - ``FieldName`` : le nom du champ à interpoler            |
+|     - ``type_interp`` : entier précisant le type              |
+|       d'interpolation du champ                                |
+|                                                               |
+|     Pour un champ aux noeuds :                                |
+|                                                               |
+|         * 0 : le champ sera interpolé en degré 1 ou 2 selon   |
+|           son support.                                        |
+|         * 1 : interpolation en degré 1                        |
+|         * 2 : interpolation en degré 2                        |
+|         * 3 : interpolation iso-P2                            |
+|                                                               |
+|     Pour un champ aux éléments :                              |
+|                                                               |
+|         * 0 : le champ sera interpolé en le considérant comme |
+|           une variable intensive.                             |
+|         * 1 : le champ sera interpolé en le considérant comme |
+|           une variable extensive.                             |
++---------------------------------------------------------------+
+| .. module:: GetFieldInterps                                   |
+|                                                               |
+| **GetFieldInterps()**                                         |
+|     Retourne la liste des champs à interoler avec leur usage. |
+|                                                               |
+|     Attention : l'usage est stocké sous forme de chaîne de    |
+|     caractères et non pas d'entier dans la liste.             |
+|                                                               |
+|     Exemple : ['DEPL', '0', 'Masse', '1', 'Densite', '0']     |
++---------------------------------------------------------------+
+| .. module:: SupprFieldInterp                                  |
+|                                                               |
+| **SupprFieldInterp(FieldName)**                               |
+|     Supprime un champ à interpoler de l'hypothèse             |
+|                                                               |
+|     - ``FieldName`` : nom du champ à supprimer                |
++---------------------------------------------------------------+
+| .. module:: SupprFieldInterps                                 |
+|                                                               |
+| **SupprFieldInterps()**                                       |
+|     Supprime tous les champs à interpoler de l'hypothèse      |
++---------------------------------------------------------------+
+
+.. note::
+  Le fichier et les instants où sont pris les champs sont définis dans l'itération ; voir :doc:`tui_create_iteration`.
+
+Les options avancées
+====================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetNivMax                                         |
+|                                                               |
+| **SetNivMax(nivmax)**                                         |
+|     Définit le niveau maximal de raffinement                  |
+|                                                               |
+|     - ``nivmax`` : niveau de raffinement à ne pas dépasser    |
++---------------------------------------------------------------+
+| .. module:: GetNivMax                                         |
+|                                                               |
+| **GetNivMax()**                                               |
+|     Retourne le niveau maximal de raffinement                 |
++---------------------------------------------------------------+
+| .. module:: SetDiamMin                                        |
+|                                                               |
+| **SetDiamMin(diammin)**                                       |
+|     Définit le diamètre minimal des futures mailles           |
+|                                                               |
+|     - ``diammin`` : diamètre minimal voulu pour une maille    |
++---------------------------------------------------------------+
+| .. module:: GetDiamMin                                        |
+|                                                               |
+| **GetDiamMin()**                                              |
+|     Retourne le diamètre minimal voulu                        |
++---------------------------------------------------------------+
+| .. module:: SetAdapInit                                       |
+|                                                               |
+| **SetAdapInit(option)**                                       |
+|     Définit le traitement à appliquer aux mailles où          |
+|     le champ de pilotage de l'adaptation n'est pas défini     |
+|                                                               |
+|     - ``option`` : entier précisant le choix retenu           |
+|                                                               |
+|         *  0 : aucun effet (défaut)                           |
+|         *  1 : les mailles sans indicateurs sont raffinées    |
+|         * -1 : les mailles sans indicateurs sont déraffinées  |
++---------------------------------------------------------------+
+| .. module:: GetAdapInit                                       |
+|                                                               |
+| **GetAdapInit()**                                             |
+|     Retourne le type de traitement à appliquer aux mailles où |
+|     le champ de pilotage de l'adaptation n'est pas défini     |
++---------------------------------------------------------------+
+| .. module:: SetExtraOutput                                    |
+|                                                               |
+| **SetExtraOutput(option)**                                    |
+|     Précise quelles sorties supplémentaires sur les mailles on|
+|     veut récupérer dans le fichier MED de sortie. C'est un    |
+|     entier multiple ou non de 2, 3, 5, 7, 11.                 |
+|                                                               |
+|     - ``option`` : entier précisant le choix retenu           |
+|                                                               |
+|         *  1 : aucun effet (défaut)                           |
+|         *  2x : le niveau de raffinement de chaque maille     |
+|         *  3x : la qualité de chaque maille                   |
+|         *  5x : le diamètre de chaque maille                  |
+|         *  7x : les fratries des mailles                      |
+|         * 11x : les voisins des mailles recollées             |
++---------------------------------------------------------------+
+| .. module:: GetExtraOutput                                    |
+|                                                               |
+| **GetExtraOutput()**                                          |
+|     Retourne le choix retenu pour la récupération des sorties |
+|     supplémentaires                                           |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+La création de l'objet hypo_1 se fait ainsi : ::
+
+    hypo_1 = homard.CreateHypothesis("HypoField")
+    hypo_1.SetField("INDICATEUR")
+    hypo_1.AddComp("INDX")
+    hypo_1.AddComp("INDZ")
+    hypo_1.SetRefinThr(1, 80.)
+    hypo_1.AddFieldInterp("DEPL")
+    hypo_1.AddFieldInterpType("MASSE", 1)
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_hypothese`
+
+.. warning::
+  En mode graphique, si on édite une hypothèse et que l'on modifie une de ses caractéristiques, par exemple le seuil de raffinement, toutes les itérations qui ont été calculées précédemment avec cette hypothèse sont invalidées. En mode python, cela n'est plus vrai : les itérations restent telles quelles.
diff --git a/doc/fr/tui_create_iteration.rst b/doc/fr/tui_create_iteration.rst
new file mode 100644 (file)
index 0000000..0c3b1be
--- /dev/null
@@ -0,0 +1,383 @@
+.. _tui_create_iteration:
+
+L'itération
+###########
+
+.. index:: single: itération
+.. index:: single: hypothèse
+.. index:: single: zone
+
+Les variables sont décrites dans :doc:`gui_create_iteration`.
+
+Méthodes de la classe homard
+****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetIteration                                      |
+|                                                               |
+| **GetIteration(iter_name)**                                   |
+|     Retourne l'instance de la classe ``iteration`` connue par |
+|     son nom                                                   |
+|                                                               |
+|     - ``iter_name`` : le nom de l'itération                   |
++---------------------------------------------------------------+
+| .. module:: GetAllIterationsName                              |
+|                                                               |
+| **GetAllIterationsName()**                                    |
+|     Retourne la liste des noms de toutes les itérations créées|
+|                                                               |
++---------------------------------------------------------------+
+
+Méthodes communes aux classes cas et iteration
+**********************************************
+Voir également dans :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: NextIteration                                     |
+|                                                               |
+| **NextIteration(iter_name)**                                  |
+|     Retourne une instance de la classe ``iteration`` après    |
+|     sa création. Elle suit immédiatement :                    |
+|                                                               |
+|     - pour un cas : l'itération initiale, correspondant au    |
+|       maillage définissant le cas                             |
+|     - pour une itération : l'itération courante               |
+|                                                               |
+| Par défaut, le maillage produit a le même nom que l'itération |
+|                                                               |
+|     - ``iter_name`` : le nom à donner à la nouvelle itération |
++---------------------------------------------------------------+
+| .. module:: LastIteration                                     |
+|                                                               |
+| **LastIteration()**                                           |
+|     Retourne une instance de la classe ``iteration``. C'est   |
+|     la dernière créée dans la descendance de :                |
+|                                                               |
+|     - pour un cas : l'itération initiale du cas               |
+|     - pour une itération : l'itération courante               |
+|                                                               |
+|     C'est celle qui est sans fille. Il y a erreur s'il existe |
+|     plus d'une branche dans la descendance.                   |
+|                                                               |
++---------------------------------------------------------------+
+
+Méthodes de la classe iteration
+*******************************
+
+Généralités
+===========
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: Compute                                           |
+|                                                               |
+| **Compute(option1, option2)**                                 |
+|     Calcule le maillage correspondant à l'itération           |
+|                                                               |
+|     - ``option1`` : un entier précisant ce qui se passe quand |
+|       des fichiers de résultats existent déjà                 |
+|                                                               |
+|         * 0 : arrêt en erreur                                 |
+|         * 1 : écrasement des anciens fichiers                 |
+|                                                               |
+|     - ``option2`` : un entier précisant ce qui est fait des   |
+|       résultats                                               |
+|                                                               |
+|         * 1 : aucune action particulière                      |
+|         * 2 : publication dans le module SMESH                |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : adaptation réussie                              |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom de l'itération                            |
++---------------------------------------------------------------+
+| .. module:: GetNumber                                         |
+|                                                               |
+| **GetNumber()**                                               |
+|     Retourne le numéro de l'itération.                        |
+|                                                               |
+|     L'itération 0 est celle associée au maillage initial.     |
+|     Ensuite, une itération de numéro N est issue de           |
+|     l'adaptation d'une itération de numéro N-1.               |
++---------------------------------------------------------------+
+| .. module:: GetIterParent                                     |
+|                                                               |
+| **GetIterParent()**                                           |
+|     Retourne l'itération mère                                 |
++---------------------------------------------------------------+
+| .. module:: AssociateHypo                                     |
+|                                                               |
+| **AssociateHypo(hypo_name)**                                  |
+|     Associe une hypothèse à l'itération                       |
+|                                                               |
+|     - ``hypo_name`` : le nom de l'hypothèse à associer        |
++---------------------------------------------------------------+
+| .. module:: GetHypoName                                       |
+|                                                               |
+| **GetHypoName()**                                             |
+|     Retourne le nom de l'hypothèse associée                   |
++---------------------------------------------------------------+
+| .. module:: GetCaseName                                       |
+|                                                               |
+| **GetCaseName()**                                             |
+|     Retourne le nom du cas associé                            |
++---------------------------------------------------------------+
+| .. module:: GetState                                          |
+|                                                               |
+| **GetState()**                                                |
+|     Retourne l'état de l'itération                            |
+|                                                               |
+|     - ``2`` : itération calculée correctement                 |
+|     - ``1`` : itération non calculée                          |
+|     - ``<=0`` : itération initiale à ne pas calculer, de      |
+|       numéro valant la valeur absolue de l'état               |
++---------------------------------------------------------------+
+| .. module:: GetLogFile                                        |
+|                                                               |
+| **GetLogFile()**                                              |
+|     Retourne le nom du fichier retraçant le déroulement de    |
+|     l'exécution de HOMARD                                     |
++---------------------------------------------------------------+
+| .. module:: GetFileInfo                                       |
+|                                                               |
+| **GetFileInfo()**                                             |
+|     Retourne le nom du fichier contenant l'analyse du maillage|
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Retourne le nom du répertoire des résutats associé à      |
+|     l'itération                                               |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Detruit l'itération et toutes ses filles éventuelles.     |
+|                                                               |
+|     - ``option`` : un entier précisant ce qui est fait des    |
+|       fichiers de maillage associés                           |
+|                                                               |
+|         * 0 : les fichiers sont conservés                     |
+|         * 1 : les fichiers sont détruits                      |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+
+Informations sur les maillages
+==============================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetMeshName                                       |
+|                                                               |
+| **SetMeshName(mesh_name)**                                    |
+|     Définit le nom du maillage produit                        |
+|                                                               |
+|     - ``mesh_name`` : le nom du maillage produit              |
++---------------------------------------------------------------+
+| .. module:: GetMeshName                                       |
+|                                                               |
+| **GetMeshName()**                                             |
+|     Retourne le nom du maillage produit                       |
++---------------------------------------------------------------+
+| .. module:: SetMeshFile                                       |
+|                                                               |
+| **SetMeshFile(mesh_file)**                                    |
+|     Définit le fichier MED du maillage produit                |
+|                                                               |
+|     - ``mesh_file`` : le nom du fichier MED qui contiendra    |
+|       le maillage produit                                     |
++---------------------------------------------------------------+
+| .. module:: GetMeshFile                                       |
+|                                                               |
+| **GetMeshFile()**                                             |
+|     Retourne le nom du fichier MED du maillage produit        |
++---------------------------------------------------------------+
+| .. module:: MeshInfo                                          |
+|                                                               |
+| **MeshInfo(Qual, Diam, Conn, Tail, Inte)**                    |
+|     Donne des informations sur le maillage. Pour chaque       |
+|     option, le choix 0 correspond à ne rien faire, alors que  |
+|     le choix 1 active l'option.                               |
+|                                                               |
+|     - ``Qual`` : qualité des mailles                          |
+|     - ``Diam`` : diamètre des mailles                         |
+|     - ``Conn`` : connexité du domaine ; en un seul morceau,   |
+|       combien de trous, etc.                                  |
+|     - ``Tail`` : tailles des constituants du domaine, groupe  |
+|       par groupe                                              |
+|     - ``Inte`` : interpénétration des mailles, par dimension  |
++---------------------------------------------------------------+
+
+Informations sur les champs
+===========================
+
+Le fichier des champs
+---------------------
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetFieldFile                                      |
+|                                                               |
+| **SetFieldFile(field_file)**                                  |
+|     Définit le fichier MED des champs utiles                  |
+|                                                               |
+|     - ``field_file`` : le nom du fichier MED contenant les    |
+|       champs : champ de pilotage de l'adaptation ou champs    |
+|       à interpoler                                            |
++---------------------------------------------------------------+
+| .. module:: GetFieldFileName                                  |
+|                                                               |
+| **GetFieldFileName()**                                        |
+|     Retourne le nom du fichier MED des champs                 |
++---------------------------------------------------------------+
+
+Les instants pour le champ de pilotage
+--------------------------------------
+Si une seule occurence du champ de pilotage de l'adaptation est présente dans le fichier des champs, il est inutile de préciser le pas de temps. Sinon, il faut préciser quel pas de temps est retenu.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetTimeStep                                       |
+|                                                               |
+| **SetTimeStep(TimeStep)**                                     |
+|     Définit l'instant pour le champ de pilotage. Le numéro    |
+|     d'ordre sera ignoré.                                      |
+|                                                               |
+|     - ``TimeStep`` : l'instant où est pris le champ           |
++---------------------------------------------------------------+
+| .. module:: SetTimeStepRank                                   |
+|                                                               |
+| **SetTimeStepRank(TimeStep, Rank)**                           |
+|     Définit l'instant et le numéro d'ordre pour le champ de   |
+|     pilotage                                                  |
+|                                                               |
+|     - ``TimeStep`` : l'instant où est pris le champ           |
+|     - ``Rank`` : le numéro d'ordre où est pris le champ       |
++---------------------------------------------------------------+
+| .. module:: SetTimeStepRankLast                               |
+|                                                               |
+| **SetTimeStepRankLast()**                                     |
+|     Précise que le dernier instant enregistré pour le champ   |
+|     de pilotage est utilisé                                   |
++---------------------------------------------------------------+
+| .. module:: GetTimeStep                                       |
+|                                                               |
+| **GetTimeStep()**                                             |
+|     Retourne l'instant où est pris le champ de pilotage       |
++---------------------------------------------------------------+
+| .. module:: GetRank                                           |
+|                                                               |
+| **GetRank()**                                                 |
+|     Retourne le numéro d'ordre où est pris le champ de        |
+|     pilotage                                                  |
++---------------------------------------------------------------+
+
+Les instants pour les champs à interpoler
+-----------------------------------------
+
+Les champs à interpoler sont définis dans l'hypothèse (voir :doc:`tui_create_hypothese`).
+Pour un champ donné, si aucune mention de pas de temps n'est précisé, tous les pas de temps seront pris en compte.
+Si on souhaite limiter l'interpolation à un ou plusieurs pas de temps, il faut le préciser ici.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetFieldInterpTimeStep                            |
+|                                                               |
+| **SetFieldInterpTimeStep(FieldName, TimeStep)**               |
+|     Définit un instant pour le champ à interpoler. Le numéro  |
+|     d'ordre sera ignoré.                                      |
+|                                                               |
+|     - ``FieldName`` : le nom du champ à interpoler            |
+|     - ``TimeStep`` : l'instant où est pris le champ           |
++---------------------------------------------------------------+
+| .. module:: SetFieldInterpTimeStepRank                        |
+|                                                               |
+| **SetFieldInterpTimeStepRank(FieldName, TimeStep)**           |
+|     Définit l'instant et le numéro d'ordre pour le champ à    |
+|     interpoler.                                               |
+|                                                               |
+|     - ``FieldName`` : le nom du champ à interpoler            |
+|     - ``TimeStep`` : l'instant où est pris le champ           |
+|     - ``Rank`` : le numéro d'ordre où est pris le champ       |
++---------------------------------------------------------------+
+| .. module:: GetFieldInterpsTimeStepRank                       |
+|                                                               |
+| **GetFieldInterpsTimeStepRank()**                             |
+|     Retourne l'ensemble des triplets (nom du champ, pas de    |
+|     temps, numéro d'ordre)                                    |
+|                                                               |
+|     Attention : l'usage est stocké sous forme de chaîne de    |
+|     caractères et non pas d'entier dans la liste.             |
+|                                                               |
+|     Exemple : ['DEPL', '1', '1', 'DEPL', '2', '1', 'Masse',   |
+|     '2', '0', 'Masse', '3', '0']                              |
++---------------------------------------------------------------+
+
+Divers
+======
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetInfoCompute                                    |
+|                                                               |
+| **SetInfoCompute(MessInfo)**                                  |
+|     Précise des options d'informations sur le déroulement du  |
+|     calcul de l'itération                                     |
+|                                                               |
+|     - ``MessInfo`` : entier pilotant des écritures, sous la   |
+|       forme d'un entier multiple de 2, 3 et 5                 |
+|                                                               |
+|         * 1 : aucune écriture (défaut)                        |
+|         * 2x : temps de calcul                                |
+|         * 3x : fichiers MED                                   |
+|         * 5x : mémoire                                        |
++---------------------------------------------------------------+
+| .. module:: GetInfoCompute                                    |
+|                                                               |
+| **GetInfoCompute()**                                          |
+|     Retourne les options d'informations sur le déroulement du |
+|     calcul de l'itération                                     |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+.. index:: single: maillage;initial
+
+Pour la création de la première itération, on part de celle qui correspond au maillage initial. C'est celle contenue dans le cas.
+::
+
+    iter_name = "Iteration_1"
+    iter_1 = case_1.NextIteration(iter_name)
+    iter_1.SetField(field_file)
+    iter_1.SetTimeStepRank( 0, 0)
+    iter_1.SetMeshName("maill_01")
+    iter_1.SetMeshFile("/local00/M.01.med")
+    iter_1.AssociateHypo("HypoField")
+    codret = iter_1.Compute(1, 2)
+
+Ensuite, on crée une itération suivante à l'itération parent de laquelle on part.
+::
+
+    iter_name = "Iteration_2"
+    iter_2 = iter_1.NextIteration(iter_name)
+    iter_2.SetField(field_file)
+    iter_2.SetTimeStepRank( 1, 1)
+    iter_2.SetMeshName("maill_02")
+    iter_2.SetMeshFile("/local00/M.02.med")
+    iter_2.AssociateHypo("HypoField")
+    codret = iter_2.Compute(1, 2)
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_iteration`
diff --git a/doc/fr/tui_create_yacs.rst b/doc/fr/tui_create_yacs.rst
new file mode 100644 (file)
index 0000000..ab885f7
--- /dev/null
@@ -0,0 +1,274 @@
+.. _tui_create_yacs:
+
+Le schéma YACS
+##############
+
+.. index:: single: YACS
+
+Les variables sont décrites dans :doc:`gui_create_yacs`.
+
+Méthodes de la classe cas
+*************************
+Voir également dans :doc:`tui_create_case`.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: CreateYACSSchema                                  |
+|                                                               |
+| **CreateYACSSchema(yacs_name, ScriptFile, DirName, MeshFile)**|
+|     Retourne une instance de la classe ``yacs`` après sa      |
+|     création                                                  |
+|                                                               |
+|     - ``yacs_name`` : le nom du schéma                        |
+|     - ``ScriptFile`` : le fichier du script python qui permet |
+|       de lancer le calcul à coupler avec l'adaptation de      |
+|       maillage                                                |
+|     - ``DirName`` : le répertoire où a lieu le calcul         |
+|     - ``MeshFile`` : le fichier MED contenant le tout premier |
+|       maillage de calcul                                      |
++---------------------------------------------------------------+
+
+Méthodes de la classe homard
+****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetYACS                                           |
+|                                                               |
+| **GetYACS(yacs_name)**                                        |
+|     Retourne l'instance de la classe ``yacs`` connue par      |
+|     son nom                                                   |
+|                                                               |
+|     - ``yacs_name`` : le nom du schéma                        |
++---------------------------------------------------------------+
+| .. module:: GetAllYACSsName                                   |
+|                                                               |
+| **GetAllYACSsName()**                                         |
+|     Retourne la liste des noms de tous les schémas existant   |
++---------------------------------------------------------------+
+
+
+
+Méthodes de la classe YACS
+**************************
+
+Généralités
+===========
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: Write                                             |
+|                                                               |
+| **Write()**                                                   |
+|     Ecrit le schéma dans le fichier lié au schéma             |
+|     Par défaut, c'est le fichier ``schema.xml``, dans le      |
+|     répertoire du cas. Si ``WriteOnFile`` a été utilisé       |
+|     auparavant, l'écriture a lieu dans le nouveau fichier.    |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : écriture réussie                                |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+| .. module:: WriteOnFile                                       |
+|                                                               |
+| **WriteOnFile(file_xml)**                                     |
+|     Ecrit le schéma dans un fichier désigné.                  |
+|                                                               |
+|     - ``file_xml`` : nom du fichier xml du schéma             |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : écriture réussie                                |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete(option)**                                            |
+|     Detruit le schéma.                                        |
+|                                                               |
+|     - ``option`` : un entier précisant ce qui est fait du     |
+|       fichier xml du schéma                                   |
+|                                                               |
+|         * 0 : le fichier est conservé                         |
+|         * 1 : le fichier est détruit                          |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+
+
+Informations sur le schéma
+==========================
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom du schéma.                                |
++---------------------------------------------------------------+
+| .. module:: SetType                                           |
+|                                                               |
+| **SetType(Type)**                                             |
+|     Définit le type de schéma.                                |
+|                                                               |
+|     - ``Type`` : le type de schéma                            |
+|                                                               |
+|         * 1 : constant                                        |
+|         * 2 : variable                                        |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Retourne le type du schéma.                               |
++---------------------------------------------------------------+
+| .. module:: SetScriptFile                                     |
+|                                                               |
+| **SetScriptFile(script_file)**                                |
+|     Définit le fichier du script python de lancement du       |
+|     calcul.                                                   |
+|                                                               |
+|     - ``script_file`` : le nom du fichier qui contient le     |
+|       le script python                                        |
++---------------------------------------------------------------+
+| .. module:: GetScriptFile                                     |
+|                                                               |
+| **GetScriptFile()**                                           |
+|     Retourne le nom du fichier MED qui contient le script     |
+|     python.                                                   |
++---------------------------------------------------------------+
+| .. module:: SetDirName                                        |
+|                                                               |
+| **SetDirName(dir_name)**                                      |
+|     Définit le nom du répertoire de calcul.                   |
+|                                                               |
+|     - ``dir_name`` : le nom du répertoire de calcul           |
++---------------------------------------------------------------+
+| .. module:: GetDirName                                        |
+|                                                               |
+| **GetDirName()**                                              |
+|     Retourne le nom du répertoire de calcul.                  |
++---------------------------------------------------------------+
+| .. module:: SetMeshFile                                       |
+|                                                               |
+| **SetMeshFile(mesh_file)**                                    |
+|     Définit le fichier MED du tout premier maillage.          |
+|                                                               |
+|     - ``mesh_file`` : le nom du fichier MED contenant le tout |
+|       premier maillage de calcul                              |
++---------------------------------------------------------------+
+| .. module:: GetMeshFile                                       |
+|                                                               |
+| **GetMeshFile()**                                             |
+|     Retourne le nom du fichier MED du tout premier maillage   |
+|     de calcul.                                                |
++---------------------------------------------------------------+
+| .. module:: SetXMLFile                                        |
+|                                                               |
+| **SetXMLFile(xml_file)**                                      |
+|     Définit le fichier xml pour l'écriture.                   |
+|                                                               |
+|     - ``xml_file`` : le nom du fichier xml                    |
++---------------------------------------------------------------+
+| .. module:: GetXMLFile                                        |
+|                                                               |
+| **GetXMLFile()**                                              |
+|     Retourne le nom du fichier xml.                           |
++---------------------------------------------------------------+
+
+
+Les options du schéma
+=====================
+Les valeurs par défaut sont définies dans les préférences du module HOMARD.
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetMaxIter                                        |
+|                                                               |
+| **SetMaxIter(MaxIter)**                                       |
+|     Définit le nombre maximal d'itérations pour le schéma.    |
+|                                                               |
+|     - ``MaxIter`` : le nombre maximal d'itérations du schéma  |
++---------------------------------------------------------------+
+| .. module:: GetMaxIter                                        |
+|                                                               |
+| **GetMaxIter()**                                              |
+|     Retourne le nombre maximal d'itérations du schéma.        |
++---------------------------------------------------------------+
+| .. module:: SetMaxNode                                        |
+|                                                               |
+| **SetMaxNode(MaxNode)**                                       |
+|     Définit le nombre maximal de noeuds pour l'adaptation.    |
+|                                                               |
+|     - ``MaxNode`` : le nombre maximal de noeuds pour          |
+|       l'adaptation. Si MaxNode est nul, aucune limite n'est   |
+|       imposée.                                                |
++---------------------------------------------------------------+
+| .. module:: GetMaxNode                                        |
+|                                                               |
+| **GetMaxNode()**                                              |
+|     Retourne le nombre maximal de noeuds pour l'adaptation.   |
++---------------------------------------------------------------+
+| .. module:: SetMaxElem                                        |
+|                                                               |
+| **SetMaxElem(MaxElem)**                                       |
+|     Définit le nombre maximal de mailles pour l'adaptation.   |
+|                                                               |
+|     - ``MaxElem`` : le nombre maximal de mailles pour         |
+|       l'adaptation. Si MaxElem est nul, aucune limite n'est   |
+|       imposée.                                                |
++---------------------------------------------------------------+
+| .. module:: GetMaxElem                                        |
+|                                                               |
+| **GetMaxElem()**                                              |
+|     Retourne le nombre maximal de mailles pour l'adaptation.  |
++---------------------------------------------------------------+
+| .. module:: SetTestConvergence                                |
+|                                                               |
+| **SetTestConvergence(Type, VRef)**                            |
+|     Précise un test de convergence pour le schéma.            |
+|                                                               |
+|     - ``Type`` : le type de convergence du schéma.            |
+|                                                               |
+|         * 0 : aucun test                                      |
+|         * 1 : quand la valeur de test est supérieure à VRef   |
+|         * 2 : quand la valeur de test est inférieure à VRef   |
+|                                                               |
+|     - ``VRef`` : la valeur de référence du test               |
++---------------------------------------------------------------+
+| .. module:: GetTestConvergenceType                            |
+|                                                               |
+| **GetTestConvergenceType()**                                  |
+|     Retourne le type de convergence du schéma.                |
++---------------------------------------------------------------+
+| .. module:: GetTestConvergenceVRef                            |
+|                                                               |
+| **GetTestConvergenceVRef()**                                  |
+|     Retourne la valeur de référence utilisée pour le test de  |
+|     convergence du schéma.                                    |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+La création d'un schéma se fait ainsi :
+::
+
+    ScriptFile = "/scratch/D68518/Salome/HOMARD_SALOME/HOMARD_SRC/doc/files/ScriptAster.py"
+    DirName = "/scratch/D68518/calcul"
+    MeshFile = "/scratch/D68518/calcul/maill.00.med"
+    YACS_0 = Case.CreateYACSSchema("YACS_0", ScriptFile, DirName, MeshFile)
+    YACS_0.SetMaxIter(4)
+
+On peut ensuite l'écrire dans un fichier :
+::
+
+    YACSFile = "/scratch/D68518/calcul/yacs.xml"
+    codret = YACS_0.WriteOnFile(YACSFile)
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_yacs`
+
+
+
diff --git a/doc/fr/tui_create_zone.rst b/doc/fr/tui_create_zone.rst
new file mode 100644 (file)
index 0000000..03a0949
--- /dev/null
@@ -0,0 +1,206 @@
+.. _tui_create_zone:
+
+La zone
+#######
+
+.. index:: single: zone
+.. index:: single: boite
+.. index:: single: sphere
+.. index:: single: cylindre
+.. index:: single: tuyau
+.. index:: single: disque
+.. index:: single: disque avec trou
+.. index:: single: 2D
+
+Les variables sont décrites dans :doc:`gui_create_zone`.
+
+Méthodes de la classe homard
+****************************
+
+Ces méthodes retournent une instance de la classe zone.
+
++----------------------------------------------------------------------------------+
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneBox                                                        |
+|                                                                                  |
+| **CreateZoneBox(zone_name, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax)**                 |
+|     Retourne une instance de la classe ``zone`` de type parallélépipèdique       |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un parallélépipède             |
+|     - ``Xmin``, ``Xmax`` : coordonnées extrêmes selon X                          |
+|     - ``Ymin``, ``Ymax`` : coordonnées extrêmes selon Y                          |
+|     - ``Zmin``, ``Zmax`` : coordonnées extrêmes selon Z                          |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneCylinder                                                   |
+|                                                                                  |
+| **CreateZoneCylinder(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H)**   |
+|     Retourne une instance de la classe ``zone`` de type cylindrique              |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un cylindre                    |
+|     - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base           |
+|       positionné sur l'axe                                                       |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                            |
+|     - ``R`` : rayon du cylindre                                                  |
+|     - ``H`` : hauteur du cylindre                                                |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZonePipe                                                       |
+|                                                                                  |
+| **CreateZonePipe(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H, Rint)** |
+|     Retourne une instance de la classe ``zone`` de type tuyau                    |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un tuyau                       |
+|     - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base           |
+|       positionné sur l'axe                                                       |
+|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                            |
+|     - ``R`` : rayon externe du tuyau                                             |
+|     - ``H`` : hauteur du tuyau                                                   |
+|     - ``R`` : rayon interne du tuyau                                             |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneSphere                                                     |
+|                                                                                  |
+| **CreateZoneSphere(zone_name, Xcen, Ycen, Zcen, R)**                             |
+|     Retourne une instance de la classe ``zone`` de type sphérique                |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur une sphère                     |
+|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère          |
+|     - ``R`` : rayon de la sphère                                                 |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneBox2D                                                      |
+|                                                                                  |
+| **CreateZoneBox2D(zone_name, Umin, Umax, Vmin, Vmax, Orient)**                   |
+|     Retourne une instance de la classe ``zone`` de type rectangulaire            |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un rectangle                   |
+|     - ``Umin``, ``Umax`` : coordonnées extrêmes pour la 1ère dimension           |
+|     - ``Vmin``, ``Vmax`` : coordonnées extrêmes pour la 2nde dimension           |
+|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneDisk                                                       |
+|                                                                                  |
+| **CreateZoneDisk(zone_name, Ucen, Vcen, R, Orient)**                             |
+|     Retourne une instance de la classe ``zone`` de type disque                   |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un disque plein                |
+|     - ``Ucen``, ``Vcen`` : coordonnées du centre du disque                       |
+|     - ``R`` : rayon du disque                                                    |
+|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
++----------------------------------------------------------------------------------+
+| .. module:: CreateZoneDiskWithHole                                               |
+|                                                                                  |
+| **CreateZoneDiskWithHole(zone_name, Ucen, Vcen, R, Rint, Orient)**               |
+|     Retourne une instance de la classe ``zone`` de type disque troué             |
+|     après sa création                                                            |
+|                                                                                  |
+|     - ``zone_name`` : le nom de la zone basée sur un disque troué                |
+|     - ``Ucen``, ``Vcen`` : coordonnées du centre du disque                       |
+|     - ``R`` : rayon externe du disque                                            |
+|     - ``Rint`` : rayon interne du disque                                         |
+|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
++----------------------------------------------------------------------------------+
+
+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+|   La convention d'orientation du plan est la même que celle   |
+|   appliquée dans les autres modules de SALOME, en particulier |
+|   GEOM :                                                      |
+|                                                               |
+|     1. plan XY ; U <==> X et V <==> Y                         |
+|     2. plan YZ ; U <==> Y et V <==> Z                         |
+|     3. plan ZX ; U <==> Z et V <==> X                         |
++---------------------------------------------------------------+
+
+
+.. note::
+  Les fonctions définissant des zones 2D ne doivent être utilisées que si l'intégralité du
+  maillage est 2D, dans un des plans de coordonnées.
+
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetZone                                           |
+|                                                               |
+| **GetZone(zone_name)**                                        |
+|     Retourne l'instance de la classe ``zone`` connue par      |
+|     son nom                                                   |
+|                                                               |
+|     - ``zone_name`` : le nom de la zone                       |
++---------------------------------------------------------------+
+| .. module:: GetAllZonesName                                   |
+|                                                               |
+| **GetAllZonesName()**                                         |
+|     Retourne la liste des noms de toutes les zones créées     |
+|                                                               |
++---------------------------------------------------------------+
+
+
+Méthodes de la classe zone
+**************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: GetName                                           |
+|                                                               |
+| **GetName()**                                                 |
+|     Retourne le nom de la zone                                |
++---------------------------------------------------------------+
+| .. module:: GetType                                           |
+|                                                               |
+| **GetType()**                                                 |
+|     Retourne le type de la zone                               |
+|                                                               |
+|         * 2 : parallélépipède                                 |
+|         * 3 : sphère                                          |
+|         * 5 : cylindre                                        |
+|         * 7 : tuyau                                           |
+|         * 11, 12, 13 : rectangle et orientation 1, 2 ou 3     |
+|         * 31, 32, 33 : disque et orientation 1, 2 ou 3        |
+|         * 61, 62, 63 : disque percé et orientation 1, 2 ou 3  |
++---------------------------------------------------------------+
+| .. module:: GetCoords                                         |
+|                                                               |
+| **GetCoords()**                                               |
+|     Retourne un tableau contenant les coordonnées de la zone  |
+|     dans l'ordre d'entrée dans le CreateZoneXXXX associé      |
++---------------------------------------------------------------+
+| .. module:: Delete                                            |
+|                                                               |
+| **Delete()**                                                  |
+|     Detruit la zone                                           |
+|                                                               |
+|     Retourne un entier :                                      |
+|         * 0 : destruction réussie                             |
+|         * autre valeur : problème                             |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+La création d'une boîte 3D se fait ainsi :
+::
+
+    zone_1 = homard.CreateZoneBox ("BLOC", -1., 1., -30., 40., 10.5, 20.8)
+
+
+La création d'un disque dans le plan XY se fait ainsi :
+::
+
+    zone_2 = homard.CreateZoneDisk ("disque", 1., 3., 43.25, 1)
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_create_zone`
+
+.. warning::
+  En mode graphique, si on édite une zone et que l'on modifie une des dimensions, toutes les itérations qui ont été calculées précédemment avec cette zone sont invalidées. En mode python, cela n'est plus vrai : les itérations restent telles quelles.
+
+
+
diff --git a/doc/fr/tui_homard.rst b/doc/fr/tui_homard.rst
new file mode 100644 (file)
index 0000000..e0a85e4
--- /dev/null
@@ -0,0 +1,35 @@
+.. _tui_homard:
+
+Le calcul
+#########
+
+Méthodes de la classe homard
+****************************
+
++---------------------------------------------------------------+
++---------------------------------------------------------------+
+| .. module:: SetLanguageShort                                  |
+|                                                               |
+| **SetLanguageShort(lang)**                                    |
+|     Affecte la langue des messages. Si le choix transmis est  |
+|     incorrect, l'anglais est utilisé.                         |
+|                                                               |
+|     - ``lang`` : la langue des messages sous forme courte.    |
+|                                                               |
+|         * 'fr' : francais                                     |
+|         * 'en' : anglais                                      |
++---------------------------------------------------------------+
+| .. module:: GetLanguageShort                                  |
+|                                                               |
+| **GetLanguageShort()**                                        |
+|     Retourne la langue des messages sous forme courte.        |
++---------------------------------------------------------------+
+
+
+Exemple
+*******
+
+
+Saisie graphique correspondante
+*******************************
+Consulter :doc:`gui_homard`
diff --git a/doc/fr/tui_usage.rst b/doc/fr/tui_usage.rst
new file mode 100644 (file)
index 0000000..bd8a3ee
--- /dev/null
@@ -0,0 +1,28 @@
+Mode d'emploi pour TUI
+######################
+
+Mode d'emploi de la saisie des données
+**************************************
+
+Le module HOMARD peut se lancer à partir d'instructions python. On trouvera ici la description de chacune des fonctions accessibles par l'utilisateur.
+
+.. toctree::
+   :maxdepth: 2
+
+   tui_create_case
+   tui_create_iteration
+   tui_create_hypothese
+   tui_create_zone
+   tui_create_boundary
+   tui_homard
+   tui_create_yacs
+
+Préférences
+***********
+
+Un certain nombre de choix par défaut pour le module HOMARD sont définis dans les préférences.
+
+.. toctree::
+   :maxdepth: 2
+
+   preferences
diff --git a/doc/fr/tutorials.rst b/doc/fr/tutorials.rst
new file mode 100644 (file)
index 0000000..25cb739
--- /dev/null
@@ -0,0 +1,127 @@
+Exemples
+########
+.. index:: single: exemple
+.. index:: single: python
+
+On trouvera ici les instructions python pour quelques configurations caractéristiques. Les fichiers de données associés sont téléchargeables. Il faut penser à adapter la valeur de la variable ``data_dir`` : c'est le répertoire dans lequel les fichiers med auront été enregistrés.
+C'est dans le répertoire ``dircase`` que seront écrits les fichiers résultant des adaptations successives. Ce répertoire est créé par défaut dans ``/tmp``.
+
+Chargement du module HOMARD
+***************************
+.. index:: single: YACS
+
+Le chargement du module HOMARD se fait de manière analogue aux autres modules.
+
+ ::
+
+  import HOMARD
+  homard = salome.lcc.FindOrLoadComponent('FactoryServer','HOMARD')
+  homard.SetCurrentStudy(salome.myStudy)
+
+Pour utiliser le module HOMARD au sein d'un schéma YACS distribué, le chargement se fait ainsi :
+
+ ::
+
+  import HOMARD
+  my_container.load_component_Library('HOMARD')
+  homard = my_container.create_component_instance('HOMARD',0)
+  homard.SetCurrentStudy(salome.myStudy)
+
+Raffinement uniforme
+********************
+.. index:: single: raffinement;uniforme
+
+On fera ici trois raffinements uniformes successifs du maillage contenu dans le fichier ``tutorial_1.00.med``. Quelques remarques :
+  * la même hypothèse est utilisée à chaque itération
+  * le maillage produit porte toujours le même nom. Cela ne pose pas de problème car il est stocké dans des fichiers différents.
+
+.. literalinclude:: ../files/tutorial_1.py
+   :lines: 52-85
+
+.. note::
+  Téléchargement des fichiers
+
+  * :download:`maillage initial<../files/tutorial_1.00.med.gz>`
+  * :download:`commandes python<../files/tutorial_1.py>`
+  * :download:`commandes python de l'utilitaire de compression<../files/tutorial_util.py>`
+
+
+Raffinement par des zones
+*************************
+.. index:: single: zone
+
+On procède ici au raffinement selon des zones. Pour passer du maillage initial au maillage 'M_1', on utilise une boîte encadrant le plan z=1 et une sphère centrée sur l'origine de rayon 1.05. Puis pour passer du maillage 'M_1' au maillage 'M_2', on remplace la sphère par une boîte encadrant le cube de côté 0.5, pointant sur l'origine et on déraffine les mailles contenues dans la toute première zone.
+
+.. literalinclude:: ../files/tutorial_2.py
+   :lines: 52-95
+
+.. note::
+  Téléchargement des fichiers
+
+  * :download:`maillage initial<../files/tutorial_2.00.med.gz>`
+  * :download:`commandes python<../files/tutorial_2.py>`
+  * :download:`commandes python de l'utilitaire de compression<../files/tutorial_util.py>`
+
+
+Raffinement selon un champ
+**************************
+.. index:: single: champ
+
+On procède ici au raffinement selon un champ. Les hypothèses servent à définir le nom du champ et les seuils de raffinement/déraffinement. La donnée du fichier et des instants est faite dans l'itération. Des champs sur les noeuds ou sur les mailles sont interpolés.
+Pour adapter le maillage H_1 issu de l'itération Iter_1, deux variantes sont appliquées. Dans la première, Iter_2, le champ est un champ scalaire d'indicateurs d'erreur et on découpe les 1.5% de mailles où l'erreur est la plus grande. Dans la seconde variante, Iter_2_bis, on se base sur un champ vectoriel et on examine le saut de ce vecteur entre une maille et ses voisines : on découpera là où la norme infinie de ce saut est supérieure au seuil absolu de 0.0001.
+
+.. literalinclude:: ../files/tutorial_3.py
+   :lines: 52-124
+
+.. note::
+  Téléchargement des fichiers
+
+  * :download:`maillage et champ étape 0<../files/tutorial_3.00.med.gz>`
+  * :download:`maillage et champ étape 1<../files/tutorial_3.01.med.gz>`
+  * :download:`commandes python<../files/tutorial_3.py>`
+  * :download:`commandes python de l'utilitaire de compression<../files/tutorial_util.py>`
+
+
+Suivi de frontières courbes
+***************************
+.. index:: single: champ
+.. index:: single: YACS
+
+On teste ici le suivi des frontières courbes : des frontières analytiques pour décrire les différentes surfaces des tuyaux et une frontière discrète pour décrire les lignes d'intersection des deux tuyaux. Le pilotage du raffinement est le suivant : raffinement uniforme de toutes les mailles contenues dans des groupes désignés. On commence par raffiner les faces internes aux tuyaux ; ensuite, on raffine deux fois de suite les faces externes aux tuyaux.
+Le schéma YACS réalisant cette adaptation est téléchargeable.
+
+.. literalinclude:: ../files/tutorial_4.py
+   :lines: 52-111
+
+.. note::
+  Téléchargement des fichiers
+
+  * :download:`maillage initial<../files/tutorial_4.00.med.gz>`
+  * :download:`maillage de la frontière discrète<../files/tutorial_4.fr.med.gz>`
+  * :download:`commandes python<../files/tutorial_4.py>`
+  * :download:`commandes python de l'utilitaire de compression<../files/tutorial_util.py>`
+  * :download:`schéma YACS<../files/tutorial_4.xml>`
+
+
+Instructions spécifiques au 2D
+******************************
+.. index:: single: 2D
+
+Les instructions pour adapter un maillage 2D sont exactement identiques à celles nécessaires à l'adaptation d'un maillage 3D. La seule exception concerne le raffinement selon des zones géométriques : des fonctions différentes sont utilisées pour pouvoir définir des zones 2D. On donne alors les coordonnées 2D des zones, en précisant l'orientation du plan du maillage.
+Dans le cas présenté ici, on raffine une première fois toutes les mailles contenues dans un disque percé, puis dans une seconde itération, toutes les mailles contenues dans un rectangle. On notera l'utilisation du suivi des frontières circulaires du domaine.
+
+.. literalinclude:: ../files/tutorial_5.py
+   :lines: 52-95
+
+.. note::
+  Téléchargement des fichiers
+
+  * :download:`maillage initial<../files/tutorial_5.00.med.gz>`
+  * :download:`maillage de la frontière discrète<../files/tutorial_5.fr.med.gz>`
+  * :download:`commandes python<../files/tutorial_5.py>`
+  * :download:`commandes python de l'utilitaire de compression<../files/tutorial_util.py>`
+
+
+.. toctree::
+   :maxdepth: 2
+
diff --git a/doc/fr/yacs.rst b/doc/fr/yacs.rst
new file mode 100644 (file)
index 0000000..b4c3cea
--- /dev/null
@@ -0,0 +1,301 @@
+.. _yacs:
+
+YACS
+####
+.. index:: single: YACS
+
+L'utilisation de schémas YACS va permettre de coupler un calcul et une adaptation comme il est décrit dans :doc:`intro`. Ce couplage peut être répété au sein d'une boucle jusqu'à l'obtention d'un critère de convergence par exemple. Il existe de nombreuses façons de programmer un schéma YACS. La solution proposée ici fonctionne mais on peut très bien faire autrement !
+
+On trouvera ici la description exhaustive d'un schéma YACS.
+
+.. note::
+  Le module HOMARD propose une création automatique de schéma YASC à partir d'un cas précédemment créé. Pour la mettre en oeuvre, consulter :doc:`gui_create_yacs`
+
+Présentation générale
+*********************
+
+On va décrire ici un schéma s'appliquant à un calcul pour lequel on cherche à stabiliser une valeur. Le calcul démarre sur un maillage initial puis HOMARD enchaîne avec une adaptation. On refait un calcul sur ce nouveau maillage et son résultat est analysé. En fonction de cette analyse, le couplage continue ou non. L'allure générale du schéma est la suivante :
+
+.. image:: ../images/yacs_01.png
+   :align: center
+   :alt: yacs - allure générale
+   :width: 512
+   :height: 306
+
+.. note::
+  Parmi l'ensemble des données manipulées, certaines sont immuables : le nom du répertoire de calcul, le nom du cas, le nom de l'hypothèse d'adaptation, etc. Il a été choisi de les imposer 'en dur' dans les différents paramètres de service ou au sein des scripts python. On pourrait également les définir a priori dans un noeud PresetNode et ensuite les transmettre par des liens. Nous n'avons pas retenu cette solution car elle augmente fortement le nombre de paramètres et de liens attachés à chaque noeud. Cela est très pénalisant pour la lisibilité du schéma. Les seules données qui vont circuler sont celles imposées par la description du service et celles qui évoluent au cours de l'exécution du schéma.
+
+Les boîtes
+**********
+
+Les boîtes principales sont :
+
+- DataInit : initialisation du maillage initial
+- Etude_Initialisation : lancement du module HOMARD dans SALOME
+- Boucle_de_convergence : gestion de la boucle d'alternance calcul/adaptation
+- Bilan : affichage final
+
+DataInit
+========
+.. image:: ../images/yacs_a_01.png
+   :align: center
+   :alt: DataInit
+   :width: 158
+   :height: 61
+
+Cette boîte est un noeud élémentaire de type PresetNode. Sa seule fonction est d'initialiser la variable MeshFile qui contient le nom du fichier du maillage initial.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 38-42
+
+Etude_Initialisation
+====================
+La boîte Etude_Initialisation lance le composant HOMARD dans SALOME. C'est un bloc composé de deux parties, qui sont invariables quelle que soit l'application envisagée :
+
+- StudyCreation : noeud python
+- SetCurrentStudy : service du composant HOMARD
+
+.. image:: ../images/yacs_b_01.png
+   :align: center
+   :alt: Etude_Initialisation
+   :width: 323
+   :height: 97
+
+Le noeud python StudyCreation sert à initialiser l'étude SALOME qui est fournie en sortie :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 44-62
+
+Le service SetCurrentStudy affecte cette étude à une instance de HOMARD.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 63-68
+
+
+Boucle_de_convergence
+=====================
+La boîte Boucle_de_convergence est une boucle de type WhileLoop. La condition est initialisée à 1 : le bloc interne Alternance_Calcul_HOMARD est exécuté. Au sein de ce bloc, on calcule et on adapte le maillage ; quand le processus doit s'arrêter soit par suite d'erreur, soit par convergence, la condition passe à 0. La boucle s'achève et on passe à la boîte suivante, Bilan.
+
+.. image:: ../images/yacs_c_01.png
+   :align: center
+   :alt: Boucle
+   :width: 163
+   :height: 93
+
+Bilan
+=====
+.. image:: ../images/yacs_d_01.png
+   :align: center
+   :alt: Bilan
+   :width: 158
+   :height: 63
+
+Cette boîte est un noeud python qui prend en entrée une chaîne de caractères, MessInfo. Si tout s'est bien passé, ce message est vide. Une fenêtre QT apparaît pour confirmer la convergence. S'il y a eu un problème, le message contient les messages émis au cours des calculs. La fenêtre QT affiche ce message.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 406-419
+
+
+La boucle de calculs
+********************
+.. image:: ../images/yacs_c_02.png
+   :align: center
+   :alt: Boucle
+   :width: 338
+   :height: 152
+
+Cette boîte est un bloc qui gère le calcul, l'adaptation et l'analyse.
+
+Calcul
+======
+.. image:: ../images/yacs_c_03.png
+   :align: center
+   :alt: Calcul
+   :width: 155
+   :height: 87
+
+Cette boîte est un noeud python qui va piloter le calcul. En entrée, on trouve le numéro du calcul (0 au départ) et le nom du fichier qui contient le maillage sur lequel calculer. En sortie, on trouve un entier qui représente l'erreur sur ce calcul (0 si tout va bien) et un dictionnaire python rassemblant les résultats du calcul. Le corps du noeud est constitué par le lancement d'un script python qui active le calcul.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 77-103
+
+Dans cet exemple, il faut définir :
+
+- rep_calc : le répertoire dans lequel sera exécuté le calcul.
+- rep_script : le répertoire dans lequel se trouve le python qui lancera le calcul. Ce répertoire est à ajouter au PATH. Depuis ce répertoire, on importera 'Script' depuis le fichier ScriptAster.py
+
+Le python Script est programmé comme l'utilisateur le souhaite pour que le calcul puisse être effectué sur le maillage courant. Selon le mode de lancement du code de calcul, on peut avoir besoin d'autres informations, comme le numéro du calcul ou le répertoire du calcul par exemple. La liberté est totale. Dans notre cas, les arguments d'entrée sont le nom du fichier de maillage, le numéro du calcul et le répertoire de calcul sous la forme de la liste python ["--rep_calc=rep_calc", "--num=numCalc", "--mesh_file=MeshFile"]
+].
+
+En revanche la sortie du script doit obéir à la règle suivante. On récupère un code d'erreur, un message d'erreur et un dictionnaire. Ce dictionnaire contient obligatoirement les clés suivantes :
+
+- "FileName" : le nom du fichier qui contient les résultats du calcul
+- "V_TEST" : la valeur dont on veut tester la convergence
+
+Adaptation
+==========
+.. image:: ../images/yacs_c_04.png
+   :align: center
+   :alt: Adaptation
+   :width: 661
+   :height: 566
+
+La boîte Adaptation est un noeud Switch piloté par le code d'erreur du calcul précédent. Si ce code est nul, YACS activera la boîte Adaptation_HOMARD qui lancera l'adaptation. Si le code n'est pas nul, on passe directement dans la boîte Arret_boucle.
+
+Adaptation_HOMARD
+-----------------
+La première tâche à exécuter concerne l'initialisation des données nécessaires à HOMARD dans la boîte HOMARD_Initialisation. Cette boîte est un noeud switch piloté par le numéro du calcul. Au démarrage, le numéro est nul et YACS active la boîte Iter_1.
+
+Iter_1
+^^^^^^
+.. image:: ../images/yacs_c_06.png
+   :align: center
+   :alt: Iter_1
+   :width: 481
+   :height: 151
+
+Cette boîte commence par créer le cas HOMARD en appelant le service CreateCase.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 208-215
+
+Le nom du cas CaseName est imposé à "Calcul". Le paramètre d'entrée MeshName est imposé à "BOX". Le paramètre d'entrée FileName est issu de la sortie du calcul précédent. Le paramètre de sortie est une instance de cas.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 443-446
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 483-486
+
+Les options de ce cas doivent maintenant être renseignées. C'est fait par le noeud python CaseOptions. Il est impératif de renseigner le répertoire de calcul. On regardera la description des fonctions dans :doc:`tui_create_case`. En sortie, on récupère l'instance de l'itération correspondant à l'état initial du cas.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 216-228
+
+Enfin, une hypothèse est créée en appelant le service CreateHypothese. Le paramètre de sortie est une instance d'hypothèse.
+
+Homard_Exec
+^^^^^^^^^^^
+Une fois initialisée, l'adaptation peut être calculée. C'est le but de la boîte Homard_Exec, sous forme d'un script python.
+
+.. image:: ../images/yacs_c_09.png
+   :align: center
+   :alt: Homard_Exec
+   :width: 153
+   :height: 141
+
+Le répertoire de calcul est récupéré. Le nom du maillage est rappelé.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 245-250
+
+../..
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 325-333
+
+L'hypothèse transmise en paramètre d'entrée est caractérisée (voir :doc:`tui_create_hypothese`) :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 254-278
+
+Il faut établir un nom pour la future itération. Pour s'assurer que le nom n'a jamais été utilisé, on met en place un mécanisme de nommage incrémental à partir du nom de l'itération initiale. Comme ce nom initial est le nom du maillage initial, on obtient une succession de noms sous la forme : M_001, M_002, M_003, etc.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 280-290
+
+L'itération est complétée : hypothèse, futur maillage, champ (voir :doc:`tui_create_iteration`) :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 292-311
+
+L'itération est calculée. Si tout s'est bien passé, la variable OK vaut 1 : on pourra continuer l'exécution du schéma. S'il y a eu un problème, la variable OK vaut 0 pour signifier que le calcul doit s'arrêter ; on donne alors un message d'erreur.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 313-324
+
+Après cette exécution, le processus sort du noeud Adaptation_HOMARD, puis du noeud Adaptation. On arrive alors au noeud d'analyse.
+
+Iter_n
+^^^^^^
+.. image:: ../images/yacs_c_07.png
+   :align: center
+   :alt: Iter_n
+   :width: 323
+   :height: 92
+
+Aux passages suivants dans le bloc d'adaptation, il faut récupérer :
+
+- la dernière itération créée pour la poursuivre : service LastIteration (voir :doc:`tui_create_iteration`)
+- l'hypothèse créée : service GetHypothesis (voir :doc:`tui_create_hypothese`)
+
+On passe ensuite dans le noeud Homard_Exec pour calculer le nouveau maillage.
+
+Arret_boucle
+------------
+.. image:: ../images/yacs_c_08.png
+   :align: center
+   :alt: Arret_boucle
+   :width: 163
+   :height: 152
+
+Le bloc Arret_boucle n'est présent que pour faire transiter des variables car les paramètres d'entrée des noeuds doivent toujours être remplis. C'est un python très simple :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 173-184
+
+Analyse
+=======
+.. image:: ../images/yacs_c_05.png
+   :align: center
+   :alt: Analyse
+   :width: 156
+   :height: 139
+
+Le bloc Analyse est un script python qui assure le contrôle complet du processus en examinant successivement les causes d'erreur possible.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 104-116
+
+../..
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 162-170
+
+On commence par analyser le retour du code de calcul :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 118-123
+
+Vérification de la présence du nom du fichier de résultats dans le dictionnaire des résultats :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 125-132
+
+Vérification de la convergence. Cela suppose que la valeur à tester est présente dans le dictionnaire sous la clé 'V_TEST'. Ici, on a mis en place un test sur la variation de la valeur d'un calcul à l'autre. Au premier passage, on ne teste rien. Aux passages suivants, on teste si la variation relative est inférieure à 1 millième. On aurait pu mettre en place un test absolu si on avait récupéré un niveau global d'erreur par exemple.
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 134-152
+
+Enfin, on vérifie que l'on ne dépasse pas un nombre maximal d'adaptations :
+
+.. literalinclude:: ../files/yacs_01.fr.xml
+   :lines: 154-159
+
+
+Utiliser ce schéma
+******************
+Pour reproduire cet exemple, on pourra télécharger :
+  * :download:`le schéma <../files/yacs_01.fr.xml>`
+  * :download:`un exemple de script python <../files/yacs_script.py>`
+  * :download:`un exemple de script python qui ne fait rien <../files/yacs_script_test.py>`
+
+Il faut l'adapter à la simulation envisagée. En particulier, il faut :
+
+- ajuster les noms des fichiers et des répertoires
+- fournir un script de lancement du calcul respectant les consignes évoquées ci-avant
+- choisir les hypothèses de pilotage de l'adaptation
+- mettre en place le test d'arrêt
+
+
+
diff --git a/doc/glossaire.rst b/doc/glossaire.rst
deleted file mode 100644 (file)
index bd5469f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _glossaire:
-
-Glossaire
-=========
-
-.. glossary::
-   :sorted:
-
-   raffinement
-      Le raffinement est une opération consistant à découper les mailles sélectionnées.
-
-   niveau
-      Le niveau d'une maille est le nombre de découpages qu'il a fallu pour l'obtenir. Les mailles du maillage initial sont du niveau 0 par convention.
-
-   déraffinement
-      Le déraffinement est une opération consistant à supprimer des mailles. Il s'agit en fait d'annuler un précédent découpage : on ne reviendra jamais 'plus haut' que le maillage initial.
-
-   zone
-      Une zone est une région qui définit un pilotage de raffinement : toutes les mailles dont au moins une arête est dans une zone seront raffinées.
-
-   cas
-      Un cas est défini par un maillage initial et une succession d'adaptations.
-
-   itération
-      Une itération est le processus qui permet de passer d'un maillage à un autre au sein d'un cas. Une itération met en oeuvre du raffinement et/ou du déraffinement selon l'hypothèse qui lui est attachée.
-
-   hypothèse
-      Une hypothèse décrit les conditions de passage d'un maillage à un autre : raffinement et/ou déraffinement, mode de pilotage, etc. Une hypothèse est référencée par une ou plusieurs itérations.
-
-   champ
-      Un champ est exprimé sur un maillage, par noeud ou par maille, avec une ou plusieurs composantes. La valeur de ce champ pilote l'adaptation.
-
-   MED
-      C'est le format d'échange des maillages et des champs pour Salome.
\ No newline at end of file
diff --git a/doc/gui_create_boundary.rst b/doc/gui_create_boundary.rst
deleted file mode 100644 (file)
index 9fb1847..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-.. _gui_create_boundary:
-
-La frontière
-============
-.. index:: single: boundary
-.. index:: single: frontière
-
-L'objet frontière contient toutes les définitions géométriques permettant de décrire une frontière courbe à suivre.
-
-Il existe deux modes de description d'une frontière :
-
-  - Discrète : ce mode est utilisé pour décrire une courbe 1D
-  - Analytique : ce mode est utilisé pour décrire une surface
-
-
-Frontière discrète
-==================
-
-Le suivi d'une frontière discrète se fera en sélectionnant une frontière choisie dans la liste des frontières discrètes existantes.
-
-Au démarrage, la liste est vide. Il faut créer une première frontière discrète par activation du bouton "*Nouveau*" :
-
-.. image:: images/create_boundary_di_1.png
-   :align: center
-
-La fenêtre proposée invite au choix d'un fichier de maillage. Ce maillage est celui de toutes les lignes constituant la frontière. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
-
-.. image:: images/create_boundary_di_2.png
-   :align: center
-
-.. note::
-  Le fichier ne doit contenir qu'un seul maillage.
-
-Si des frontières discrètes ont déjà été définies pour un autre cas, on peut sélectionner l'une d'elles. On peut également créer une nouvelle frontière discrète par activation du bouton "*Nouveau*", comme expliqué précédemment.
-
-.. image:: images/create_boundary_di_3.png
-   :align: center
-
-
-
-Frontière analytique
-====================
-Au démarrage, Salome affiche un tableau avec un seule colonne. Cette colonne contient la liste de tous les groupes du maillage initial définissant le cas.
-
-.. image:: images/create_boundary_an_1.png
-   :align: center
-
-Il faut créer une première frontière analytique par activation du bouton "*Nouveau*". On aura le choix entre cylindre ou sphère. Une fois que la frontière sera validée, son nom figurera en en-tête d'une deuxième colonne.
-
-.. image:: images/create_boundary_an_2.png
-   :align: center
-
-Il faut maintenant établir le lien entre le maillage définissant le cas et cette frontière décrite analytiquement. Cela se fait en cochant les groupes des faces qui doivent se trouver sur la frontière.
-
-.. image:: images/create_boundary_an_3.png
-   :align: center
-
-Cette opération est répétée autant de fois que l'on souhaite placer des faces du maillages sur une surface courbe :
-
-.. image:: images/create_boundary_an_4.png
-   :align: center
-
-.. note::
-
-  Un groupe peut très bien ne jamais être coché : cela signifie que les mailles qu'il définit n'appartiennent à aucune des frontières décrites.
-
-  Un groupe ne peut être coché qu'une seule fois. En effet, des mailles surfaciques ne peuvent pas appartenir à plus d'une surface.
-
-  Plusieurs groupes peuvent être cochés pour une même frontière. Cela arrive quand le maillage initial de la zone a été subdivisé en plusieurs groupes : toutes les mailles surfaciques appartiennent à cette surface mais ont été réparties en plusieurs groupes.
-
-  Inversement, une frontière peut très bien n'être retenue par aucun groupe. Cela arrive si elle a été définie pour un cas précédent et qu'elle est sans objet pour le cas en cours de définition.
-
-
-Il existe deux types de frontière analytique :
-
-  - Cylindre
-  - Sphère
-
-.. note::
-  Les valeurs numériques proposées par défaut tiennent compte de la géométrie du maillage.
-
-
-Un cylindre
-"""""""""""
-.. index:: single: cylindre
-
-Le cylindre est défini par un point de l'axe, son axe et son rayon. L'axe est défini par un vecteur. La norme de ce vecteur n'est pas nécessairement égale à 1 ; de même, son orientation n'a aucune importance. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
-
-.. image:: images/create_boundary_an_cy.png
-   :align: center
-
-Une sphère
-""""""""""
-.. index:: single: sphere
-
-La sphère est définie par son centre et son rayon. Un nom de frontière est proposé automatiquement : Boun_1, Boun_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour une autre frontière.
-
-.. image:: images/create_boundary_an_sp.png
-   :align: center
-
-.. index:: single: arbre d'étude
-
-L'arbre d'étude
-"""""""""""""""
-A l'issue de cette création de frontières, l'arbre d'études a été enrichi. On y trouve toutes les frontières créées, identifiées par leur nom, avec la possibilité de les éditer.
-
-.. image:: images/create_boundary_1.png
-   :align: center
-
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter : :ref:`tui_create_boundary`
-
-
-
diff --git a/doc/gui_create_case.rst b/doc/gui_create_case.rst
deleted file mode 100644 (file)
index 5758e8e..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-.. _gui_create_case:
-
-Le cas
-======
-.. index:: single: cas
-
-La définition du cas se fait par la donnée des informations suivantes :
-
-  - Un nom
-  - Un répertoire
-  - Le fichier du maillage initial
-  - Le type de conformité pour la série d'adaptations envisagées
-  - Les éventuelles frontières courbes à respecter
-
-.. image:: images/create_case_1.png
-   :align: center
-
-
-Le nom du cas
-"""""""""""""
-Un nom de cas est proposé automatiquement : Case_1, Case_2, etc. Ce nom peut être modifié. Il ne doit pas avoir déjà été utilisé pour un autre cas.
-
-Le répertoire
-"""""""""""""
-Le répertoire est celui qui contiendra les fichiers produits par les adaptations successives. Ce répertoire doit exister. Par défaut, Salome propose ``/tmp``. Ce choix peut être modifié, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche. C'est dans ce répertoire que seront exportés les maillages au format MED, dans des fichiers de nom ``maill.xx.med``, où ``xx`` est un numéro d'ordre créé automatiquement ; ces noms de fichiers seront visibles dans l'arbre d'études.
-
-.. image:: images/create_case_2.png
-   :align: center
-
-.. index:: single: maillage;initial
-.. index:: single: MED
-
-Le maillage initial
-"""""""""""""""""""
-Le maillage initial doit se trouver dans un fichier au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Mais il peut également avoir été créé avec le module SMESH et exporté au format MED. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
-
-.. image:: images/create_case_3.png
-   :align: center
-
-.. note::
-  Le fichier ne doit contenir qu'un seul maillage.
-
-.. warning::
-  Le maillage ne doit pas être lui-même le produit d'une adaptation de maillage par HOMARD, sous peine de perdre la cohérence entre les différents niveaux de raffinement/déraffinement
-
-.. index:: single: type de conformité
-
-Le type de conformité
-"""""""""""""""""""""
-Les itérations qui seront calculées pour ce cas devront toutes respecter le même comportement vis-à-vis de la conformité.
-
-L'option par défaut, 'conforme', implique que les maillages produits par HOMARD seront conformes au sens des éléments finis. C'est le choix classique de la plupart des logiciels de simulation par éléments finis.
-
-Néanmoins, si le calcul est possible avec des maillages non conformes, on a le choix entre 3 possibilités :
-
-.. image:: images/create_case_4.png
-   :align: center
-
-* 1 noeud par maille : une maille ne peut posséder qu'un seul noeud de non conformité avec ses voisines.
-* 1 noeud par arête : chaque arête d'une maille peut être découpée sans que la maille voisine par cette arête ne le soit.
-* quelconque : aucune limitation sur les raccords de conformité d'une maille à l'autre.
-
-.. index:: single: frontière
-
-Les frontières courbes
-""""""""""""""""""""""
-Quand le bord du domaine est courbe, HOMARD sait placer les nouveaux noeuds sur ces frontières pour éviter des singularités artificielles. Cette technique est aussi applicable à une courbure intérieure à un domaine.
-
-Deux cas de figure sont présents :
-
-* courbe 1D : cette courbe peut être définie dans un plan, par exemple pour un calcul 2D. Elle peut également être définie dans l'espace 3D, par exemple pour l'intersection de deux surfaces. Une ligne à suivre est décrite de manière discrète.
-* surface : une surface à suivre est décrite de manière analytique.
-
-On cochera le ou les boutons voulus :
-
-.. image:: images/create_case_5.png
-   :align: center
-
-La définition des frontières est décrite dans :ref:`gui_create_boundary`.
-
-.. index:: single: pyramide
-
-Les options avancées
-""""""""""""""""""""
-Par défaut, aucune option avancée n'est active.
-
-Néanmoins, on peut définir une oprion avancée :
-
-.. image:: images/create_case_7.png
-   :align: center
-
-Par défaut, HOMARD sait traiter des maillages en 2 ou 3 dimensions et comportant les mailles suivantes :
-   - mailles-points
-   - segments
-   - triangles
-   - quadrangles
-   - tétraèdres
-   - hexaèdres
-   - prismes
-Si le maillage initial comporte des pyramides, il y a arrêt en erreur. Toutefois, si on est certain que les raffinements ultérieurs ne toucheront aucune des arêtes des pyramides, on cochera la case "Pyramides autorisées". Les adaptations se dérouleront normalement et les pyramides seront restituées telles quelles dans le maillage final.
-
-L'arbre d'étude
-"""""""""""""""
-A l'issue de cette création de cas, l'arbre d'études a été enrichi de ce nouveau cas. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni.
-
-.. image:: images/create_case_6.png
-   :align: center
-
-
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter :ref:`tui_create_case`
-
diff --git a/doc/gui_create_hypothese.rst b/doc/gui_create_hypothese.rst
deleted file mode 100644 (file)
index a3bb4b1..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-.. _gui_create_hypothese:
-
-L'hypothèse
-===========
-.. index:: single: hypothèse
-
-L'hypothèse contient toutes les paramètres de pilotage d'une adaptation d'un maillage. Cette opération permet de réaliser l'itération à laquelle elle est attachée.
-
-Il existe trois classes d'hypothèses :
-
-  - Uniforme sur tout le maillage,
-  - Selon un champ,
-  - En fonction de zone géométrique.
-
-.. image:: images/create_hypothese_1.png
-   :align: center
-
-
-Nom de l'hypothèse
-""""""""""""""""""
-Un nom de l'hypothèse est proposé automatiquement : Hypo_1, Hypo_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une hypothèse précédente.
-
-Adaptation uniforme
-"""""""""""""""""""
-Par défaut on propose un raffinement uniforme. Quand on part d'un maillage qui a déjà été raffiné, l'option de déraffinement supprimera les mailles produites.
-
-Adaptation selon un champ
-"""""""""""""""""""""""""
-
-.. note::
-  Pour pouvoir adapter le maillage selon un champ il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`). Le nom du fichier qui a été sélectionné est affiché sans modification possible ici :
-
-.. image:: images/create_hypothese_ch_1.png
-   :align: center
-
-Le champ voulu est à choisir dans la liste des champs contenus dans le fichier.
-Une fois ce champ choisi, la liste des ses composantes s'affiche. Il suffit de désigner la (ou les) composantes désirées.
-
-Si l'on choisit une seule composante, par défaut, c'est sa valeur absolue qui sera utilisée, mais il est possible d'utiliser la valeur relative. Dans le cas de plusieurs composantes, par défaut HOMARD utilisera la norme L2 (euclidienne). On peut toutefois choisir d'utiliser la norme infinie (le max des valeurs absolues des composantes).
-
-On peut choisir de ne pas utiliser directement le champ, mais sa variation d'un élément à ses voisins. Pour cela, on activera le bouton "*Saut entre éléments*".
-
-.. image:: images/create_hypothese_ch_2.png
-   :align: center
-
-
-Le raffinement se fait selon un seuil qui définit un critère haut de raffinement. Toutes les mailles pour lesquelles l'indicateur est supérieur à ce critère seront raffinées.
-Pour le choix du critère, trois variantes sont possible :
-
-  - selon un pourcentage de mailles à raffiner, nombre réel compris entre 0 et 100 ; HOMARD raffinera les x% des mailles qui ont la plus grande valeur du champ.
-  - selon une valeur relative du champ, nombre compris entre 0 et 100 ; HOMARD raffinera les mailles où le champ est supérieur à x% de l'intervalle [mini,maxi].
-  - selon une valeur absolue ; toutes les mailles avec une valeur de champ supérieure à cette valeur seront raffinées.
-
-La même convention s'applique au déraffinement, en remplaçant supérieur par inférieur. On peut inactiver une des fonctions (raffinement ou déraffinement) en cochant le bouton ad_hoc.
-
-.. image:: images/create_hypothese_ch_3.png
-   :align: center
-
-
-Adaptation selon une zone
-"""""""""""""""""""""""""
-.. index:: single: zone
-
-Au démarrage, il faut créer une première zone par activation du bouton "*Nouveau*" (voir :ref:`gui_create_zone`) :
-
-.. image:: images/create_hypothese_zo_1.png
-   :align: center
-
-Lorsque des zones ont déjà été créées, la liste apparaît dans la fenêtre, ce qui permet de sélectionner les zones voulues. On doit alors préciser si une zone est utilisée pour raffiner toutes les mailles dont une arête est contenue dans la zone, ou si la zone est utilisée pour déraffiner les mailles intérieures à la zone. Si aucun choix n'est fait, la zone est ignorée dans cette hypothèse.
-
-.. image:: images/create_hypothese_zo_2.png
-   :align: center
-
-
-Filtrage par les groupes
-""""""""""""""""""""""""
-.. index:: single: groupe
-
-On peut restreindre l'application de l'hypothèse d'adaptation à des groupes. Ainsi les mailles n'appartenant pas à ces groupes ne seront pas modidiées, sauf par contamination ultérieure du raffinement pour assurer la conformité du maillage final.
-On coche le bouton associé :
-
-.. image:: images/create_hypothese_gr_1.png
-   :align: center
-
-La liste des groupes de mailles présents dans le maillage est affichée. Il suffit de cocher ceux voulus pour restreindre l'hypothèse d'adaptation.
-
-.. image:: images/create_hypothese_gr_2.png
-   :align: center
-
-
-Interpolation de champs
-"""""""""""""""""""""""
-.. index:: single: interpolation
-
-.. note::
-  Pour pouvoir interpoler un champ de l'ancien vers le nouveau maillage, il faut avoir au préalable désigné le fichier med contenant le champ. Cela se fait dans la fenêtre de construction de l'itération (voir :ref:`gui_create_iteration`).
-
-Par défaut, aucun champ n'est interpolé. A contrario, on peut demander l'interpolation de tous les champs présents dans le fichier fourni :
-
-.. image:: images/create_hypothese_ch_4.png
-   :align: center
-
-Si on veut choisir les champs à interpoler, il faut les cocher dans la liste de tous les champs présents dans le fichier fourni :
-
-.. image:: images/create_hypothese_ch_5.png
-   :align: center
-
-
-Les options avancées
-""""""""""""""""""""
-Si la case "Options avancées" n'est pas cochée, aucune contrainte supplémentaire n'est définie.
-Si la case est cochée, on définira les options avancées.
-
-Une première série d'options portent sur la finesse maximale de maillage que l'on ne veut pas dépasser. Deux directives sont possibles, séparément ou ensemble. On peut imposer une taille de maille minimale : une maille dont le diamètre est inférieur à cette limite ne sera plus découpée. Par défaut, on propose un diamètre minimal nul, ce qui revient à ne rien imposer. On peut imposer un niveau de raffinement maximal. Par défaut, le maximum est à 99, ce qui équivaut en général à ne rien imposer.
-
-La seconde série d'options n'a d'intérêt que dans le cas où l'adaptation est piloté par un champ et que ce champ n'est pas défini partout dans le maillage. Cela arrive par exemple quand on construit un champ basé sur une distance dans un plan alors que le domaine est 3D : le champ ne sera pas défini sur les noeuds hors du plan. Pour de tels champs, cette option permet de préciser le comportement que l'on souhaite dans les régions où le champ n'est pas défini. Par défaut, il ne se passe rien : les mailles sont gardées telles quelles. On peut choisir les deux autres variantes : raffiner, toutes les mailles seront a priori coupées, ou déraffiner, toutes les mailles seront candidates au déraffinement.
-
-
-.. image:: images/create_hypothese_av_1.png
-   :align: center
-
-.. index:: single: arbre d'étude
-
-L'arbre d'étude
-"""""""""""""""
-.. index:: single: arbre d'étude
-
-L'arbre d'études contient les hypothèses créées et les itérations qui les utilisent. La description des zones qui leur sont éventuellement attachées est présente.
-
-.. image:: images/create_hypothese_2.png
-   :align: center
-
-
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter :ref:`tui_create_hypothese`
diff --git a/doc/gui_create_iteration.rst b/doc/gui_create_iteration.rst
deleted file mode 100644 (file)
index 0b662fd..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-.. _gui_create_iteration:
-
-L'itération
-===========
-.. index:: single: itération
-
-La définition d'une itération se fait par la donnée des informations suivantes :
-
-  - L'itération précédente
-  - Le nom du maillage résultat
-  - L'hypothèse utilisée
-  - Eventuellement, le fichier du champ d'indicateurs d'erreur
-
-.. image:: images/create_iteration_1.png
-   :align: center
-
-Le nom de l'itération
-"""""""""""""""""""""
-Un nom de cas est proposé automatiquement : Iter_1, Iter_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été utilisé pour une itération précédente.
-
-L'itération précédente
-""""""""""""""""""""""
-L'itération précédente est choisie dans l'arbre d'étude. Le nom du maillage correspondant sera affiché.
-
-.. index:: single: maillage;résultat
-
-Le nom du maillage résultat
-"""""""""""""""""""""""""""
-L'itération en cours de création produira un maillage. Ce maillage sera connu sous un nom. Ce nom est fourni en le tapant dans la zone de texte. Par défaut, on propose un nom identique à celui de l'itération précédente.
-
-.. index:: single: champ
-.. index:: single: MED
-
-Le champ
-""""""""
-Pour créer ou utiliser une hypothèse d'adaptation basée sur un champ exprimé sur le maillage, on doit fournir le fichier où se trouve le champ. C'est également le cas si on veut interpoler des champs du maillage n au maillage n+1. Ce fichier est au format MED. Classiquement, il aura été produit par le logiciel de calcul avec lequel on travaille. Le nom du fichier peut être fourni, soit en tapant le nom dans la zone de texte, soit en activant la fonction de recherche.
-
-
-.. image:: images/create_iteration_2.png
-   :align: center
-
-Dans le cas où des pas de temps ont été définis, une solution simple consiste à traiter les champs au dernier pas de temps enregistré dans le fichier. Si on veut définir un autre pas de temps, on coche le bouton "*Pas de temps choisi*". Les valeurs de 'Pas de temps' et de 'Numéro d'ordre' sont celles correspondant à la convention MED (time step / rank). Ces valeurs dépendent de la logique qui a été retenue par le logiciel qui a écrit le fichier. Souvent ces deux valeurs sont identiques mais il arrive que l'on disjoigne les pas de temps et les intervalles d'archivage.
-
-.. image:: images/create_iteration_3.png
-   :align: center
-
-.. index:: single: hypothèse
-
-L'hypothèse utilisée
-""""""""""""""""""""
-L'itération en cours pilotera l'adaptation par HOMARD selon un scénario défini dans une hypothèse. Celle-ci est choisie dans la liste des hypothèses existantes.
-
-Au démarrage, il faut créer une première hypothèse par activation du bouton "*Nouveau*" (voir :ref:`gui_create_hypothese`) :
-
-.. image:: images/create_iteration_4.png
-   :align: center
-
-Ensuite, si une hypothèse précédemment définie convient, il suffit de la sélectionner dans la liste proposée. Sinon, il faut créer une nouvelle hypothèse par activation du bouton "*Nouveau*", puis la sélectionner dans la liste proposée :
-
-.. image:: images/create_iteration_5.png
-   :align: center
-
-
-.. note::
-  Si on envisage une adaptation selon les valeurs d'un champ sur le maillage, il faut avoir renseigné les informations sur ce champ avant de créer une nouvelle hypothèse.
-
-.. index:: single: arbre d'étude
-
-L'arbre d'étude
-"""""""""""""""
-A l'issue de cette création d'itération, l'arbre d'études a été enrichi. On y trouve l'itération initiale, identifiée par le nom du maillage qui a été lu dans le fichier fourni, l'itération courante, identifiée par son nom. On trouve aussi l'hypothèse qui lui est attachée. L'icône en regard de l'itération permet de différencier les itérations calculées ou non.
-
-.. image:: images/create_iteration_6.png
-   :align: center
-
-Quand plusieurs itérations s'enchaînent, leur hypothèse est visible dans l'arbre d'étude. On remarquera dans la figure ci-après que deux itérations peuvent partager la même hypothèse.
-
-.. image:: images/create_iteration_7.png
-   :align: center
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter :ref:`tui_create_iteration`
diff --git a/doc/gui_create_zone.rst b/doc/gui_create_zone.rst
deleted file mode 100644 (file)
index b57e472..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-.. _gui_create_zone:
-
-La zone
-=======
-.. index:: single: zone
-.. index:: single: 2D
-
-L'objet zone contient toutes les définitions géométriques permettant de décrire une zone à raffiner.
-
-En 3D, il existe quatre types de zone :
-
-  - Parallélépipède
-  - Cylindre
-  - Tuyau
-  - Sphère
-
-Leurs analogues en 2D sont :
-
-  - Rectangle
-  - Disque
-  - Disque percé
-
-Le principe du raffinement selon des zones est le suivant. Chaque arête de maille dont les deux extrémités
-sont incluses dans une même zone sera coupée. Ensuite HOMARD applique l'algorithme de traitement de la
-conformité pour produire un maillage correct.
-
-.. note::
-  Les valeurs proposées par défaut pour les dimensions des zones tiennent compte de la géométrie du maillage.
-
-Nom de la zone
-""""""""""""""
-Un nom de zone est proposé automatiquement : Zone_1, Zone_2, etc. Ce nom peut être modifié. Il ne doit pas avoir été déjà utilisé pour une autre zone.
-
-Un parallélépipède
-""""""""""""""""""
-.. index:: single: boite
-
-Le parallélépipède est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chaque direction.
-
-.. image:: images/create_zone_1.png
-   :align: center
-
-Un cylindre
-"""""""""""
-.. index:: single: cylindre
-
-Le cylindre est défini par son axe, un point de base positionné sur l'axe, sa hauteur et son rayon. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1.
-
-.. image:: images/create_zone_2.png
-   :align: center
-
-Un tuyau
-""""""""
-.. index:: single: tuyau
-
-Le cylindre est défini par son axe, un point de base positionné sur l'axe, sa hauteur et ses rayons interne et externe. L'axe est défini par un vecteur qui doit être correctement orienté : on retiendra le volume partant de la base dans la direction du vecteur jusqu'à la hauteur retenue. La norme de ce vecteur n'est pas nécessairement égale à 1.
-
-.. image:: images/create_zone_3.png
-   :align: center
-
-Une sphère
-""""""""""
-.. index:: single: sphere
-
-La sphère est définie par son centre et son rayon.
-
-.. image:: images/create_zone_4.png
-   :align: center
-
-Un rectangle
-""""""""""""
-.. index:: single: rectangle
-
-Le rectangle est obligatoirement parallèle aux axes de coordonnées. Il est défini par ses extrêmes dans chacune des directions valides. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
-
-.. image:: images/create_zone_21.png
-   :align: center
-
-Un disque
-"""""""""
-.. index:: single: disque
-
-Le disque est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et son rayon. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
-
-.. image:: images/create_zone_22.png
-   :align: center
-
-Un disque avec trou
-"""""""""""""""""""
-.. index:: single: disque avec trou
-
-Le disque avec trou est obligatoirement dans le plan des axes de coordonnées. Il est défini par son centre et ses rayons externe et interne. La coordonnée constante est affichée pour information, mais n'est pas modifiable.
-
-.. image:: images/create_zone_23.png
-   :align: center
-
-
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter :ref:`tui_create_zone`
diff --git a/doc/gui_homard.rst b/doc/gui_homard.rst
deleted file mode 100644 (file)
index c4df643..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-.. _gui_homard:
-
-Le calcul
-=========
-.. index:: single: itération
-.. index:: single: calcul
-
-Lancer une adaptation
-"""""""""""""""""""""
-Lancer une adaptation s'obtient en sélectionnant l'itération à calculer. Elle est repérée par une icone "en attente". On choisit ensuite "*Calculer*" dans le menu HOMARD ou à la souris.
-
-.. image:: images/lancement_1.png
-   :align: center
-
-
-.. index:: single: arbre d'étude
-
-L'arbre d'étude
-"""""""""""""""
-
-A l'issue de ce calcul, l'arbre d'études a été enrichi. L'icone devant l'itération est validée. Sous l'itération, on trouve la référence aux fichiers de résultats créés, identifiés par leur nom dans le répertoire *rep* qui a été défini à la création du cas :
-
-  - *rep*/I(n+1)/Liste.n.vers.(n+1)
-  - *rep*/I(n+1)/apad.n.vers.(n+1).bilan
-  - *rep*/maill.(n+1).med
-
-Les deux premiers fichiers sont des fichiers de texte, éditables. Liste.n.vers.(n+1) contient des informations sur le déroulement de l'adaptation : récapitulatif du mode d'adaptation, pourcentage de mailles concernées, etc. Le fichier apad.n.vers.(n+1).bilan est un résumé des caractéristiques du maillage obtenus.
-Le fichier maill.(n+1).med est celui qui contient le maillage produit au format MED. On retrouve ce maillage dans la section de l'arbre d'études du module SMESH. Il est alors visible dans ce module et utilisable ensuite comme tout autre maillage.
-
-
-.. image:: images/lancement_2.png
-   :align: center
-
-Consulter le résultat d'une adaptation
-""""""""""""""""""""""""""""""""""""""
-Les deux fichiers de texte, Liste.n.vers.(n+1) et apad.n.vers.(n+1).bilan, sont visibles en les sélectionnant. On choisit ensuite "*Afficher le fichier*" dans le menu HOMARD ou à la souris.
-
-.. image:: images/lancement_3.png
-   :align: center
-
-
-
-.. note::
-  Par défaut, le calcul est lancé avec l'exécutable de HOMARD installé avec Salome. Si on souhaite utiliser une version privée de HOMARD, pour tester une évolution par exemple, il faut préciser où le nouvel exécutable est disponible. Pour cela, il faut renseigner deux variables d'environnement.
-  "*HOMARD_REP_EXE_PRIVATE*" définit le répertoire dans lequel se trouve l'exécutable voulu.
-  "*HOMARD_EXE_PRIVATE*" définit le nom de l'exécutable dans ce répertoire, si ce nom est différent de "*homard*".
-
-Méthodes python correspondantes
-"""""""""""""""""""""""""""""""
-Consulter :ref:`tui_create_iteration`
-
diff --git a/doc/gui_usage.rst b/doc/gui_usage.rst
deleted file mode 100644 (file)
index 81e7bf5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _gui_usage:
-
-Mode d'emploi pour l'interface graphique
-========================================
-.. index:: single: cas
-.. index:: single: itération
-
-Activer le module HOMARD
-""""""""""""""""""""""""
-Pour utiliser le module HOMARD, deux façons existent :
-
-#. en activant l'onglet HOMARD dans la liste des modules,
-#. en cliquant sur le bouton HOMARD dans la barre d'outils.
-
-L'utilisateur a alors le choix entre créer une nouvelle étude ou en ouvrir une qui a été précédemment enregistrée, selon le principe qui a été retenu pour tous les autres modules de Salome.
-
-.. image:: images/homard_1.png
-   :align: center
-
-Définir une adaptation
-""""""""""""""""""""""
-
-Une fois que HOMARD a été activé, la permière action consiste à créer un cas. Il s'agit de sélectionner le maillage initial de la suite d'adaptations envisagée (voir :ref:`gui_create_case`). A partir de ce cas, on définira les itérations successives (voir :ref:`gui_create_iteration`) à partir des hypothèses (voir :ref:`gui_create_hypothese`). Les adaptations sont lancées tel que décrit dans :ref:`gui_homard`.
-
-
-Mode d'emploi de la saisie des données
-""""""""""""""""""""""""""""""""""""""
-
-.. toctree::
-   :maxdepth: 2
-
-   gui_create_case
-   gui_create_iteration
-   gui_create_hypothese
-   gui_create_zone
-   gui_create_boundary
-   gui_homard
-
diff --git a/doc/images/cl_0.gif b/doc/images/cl_0.gif
new file mode 100644 (file)
index 0000000..7f1d331
Binary files /dev/null and b/doc/images/cl_0.gif differ
diff --git a/doc/images/cl_1.gif b/doc/images/cl_1.gif
new file mode 100644 (file)
index 0000000..d7499e5
Binary files /dev/null and b/doc/images/cl_1.gif differ
diff --git a/doc/images/cl_2.gif b/doc/images/cl_2.gif
new file mode 100644 (file)
index 0000000..abd0dfd
Binary files /dev/null and b/doc/images/cl_2.gif differ
diff --git a/doc/images/cl_3.gif b/doc/images/cl_3.gif
new file mode 100644 (file)
index 0000000..cf237e4
Binary files /dev/null and b/doc/images/cl_3.gif differ
diff --git a/doc/images/cl_4.gif b/doc/images/cl_4.gif
new file mode 100644 (file)
index 0000000..c0a7946
Binary files /dev/null and b/doc/images/cl_4.gif differ
diff --git a/doc/images/cl_5.gif b/doc/images/cl_5.gif
new file mode 100644 (file)
index 0000000..7433586
Binary files /dev/null and b/doc/images/cl_5.gif differ
diff --git a/doc/images/cl_6.gif b/doc/images/cl_6.gif
new file mode 100644 (file)
index 0000000..b93fa9c
Binary files /dev/null and b/doc/images/cl_6.gif differ
diff --git a/doc/images/create_boundary_1.png b/doc/images/create_boundary_1.png
deleted file mode 100644 (file)
index 0460d48..0000000
Binary files a/doc/images/create_boundary_1.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_1.png b/doc/images/create_boundary_an_1.png
deleted file mode 100644 (file)
index 09630eb..0000000
Binary files a/doc/images/create_boundary_an_1.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_2.png b/doc/images/create_boundary_an_2.png
deleted file mode 100644 (file)
index 25c6e9b..0000000
Binary files a/doc/images/create_boundary_an_2.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_3.png b/doc/images/create_boundary_an_3.png
deleted file mode 100644 (file)
index 6f38d9f..0000000
Binary files a/doc/images/create_boundary_an_3.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_4.png b/doc/images/create_boundary_an_4.png
deleted file mode 100644 (file)
index abf1042..0000000
Binary files a/doc/images/create_boundary_an_4.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_cy.png b/doc/images/create_boundary_an_cy.png
deleted file mode 100644 (file)
index e3fef85..0000000
Binary files a/doc/images/create_boundary_an_cy.png and /dev/null differ
diff --git a/doc/images/create_boundary_an_sp.png b/doc/images/create_boundary_an_sp.png
deleted file mode 100644 (file)
index 27b9443..0000000
Binary files a/doc/images/create_boundary_an_sp.png and /dev/null differ
diff --git a/doc/images/create_boundary_di_1.png b/doc/images/create_boundary_di_1.png
deleted file mode 100644 (file)
index 8f80605..0000000
Binary files a/doc/images/create_boundary_di_1.png and /dev/null differ
diff --git a/doc/images/create_boundary_di_2.png b/doc/images/create_boundary_di_2.png
deleted file mode 100644 (file)
index d952eda..0000000
Binary files a/doc/images/create_boundary_di_2.png and /dev/null differ
diff --git a/doc/images/create_boundary_di_3.png b/doc/images/create_boundary_di_3.png
deleted file mode 100644 (file)
index 01195a1..0000000
Binary files a/doc/images/create_boundary_di_3.png and /dev/null differ
index ddef5000d09e45e3b401472f8a35eaf0433c4f51..f2ff4339a64a3bd0031d48d1d900e16d881fd582 100644 (file)
Binary files a/doc/images/create_case_1.png and b/doc/images/create_case_1.png differ
diff --git a/doc/images/create_case_2.png b/doc/images/create_case_2.png
deleted file mode 100644 (file)
index 435a518..0000000
Binary files a/doc/images/create_case_2.png and /dev/null differ
diff --git a/doc/images/create_case_3.png b/doc/images/create_case_3.png
deleted file mode 100644 (file)
index eba3197..0000000
Binary files a/doc/images/create_case_3.png and /dev/null differ
diff --git a/doc/images/create_case_4.png b/doc/images/create_case_4.png
deleted file mode 100644 (file)
index 3429fd6..0000000
Binary files a/doc/images/create_case_4.png and /dev/null differ
diff --git a/doc/images/create_case_5.png b/doc/images/create_case_5.png
deleted file mode 100644 (file)
index 418535b..0000000
Binary files a/doc/images/create_case_5.png and /dev/null differ
diff --git a/doc/images/create_case_6.png b/doc/images/create_case_6.png
deleted file mode 100644 (file)
index c598729..0000000
Binary files a/doc/images/create_case_6.png and /dev/null differ
diff --git a/doc/images/create_case_7.png b/doc/images/create_case_7.png
deleted file mode 100644 (file)
index 766430f..0000000
Binary files a/doc/images/create_case_7.png and /dev/null differ
diff --git a/doc/images/create_hypothese_1.png b/doc/images/create_hypothese_1.png
deleted file mode 100644 (file)
index 7c6eb19..0000000
Binary files a/doc/images/create_hypothese_1.png and /dev/null differ
diff --git a/doc/images/create_hypothese_2.png b/doc/images/create_hypothese_2.png
deleted file mode 100644 (file)
index fbb434b..0000000
Binary files a/doc/images/create_hypothese_2.png and /dev/null differ
diff --git a/doc/images/create_hypothese_av_1.png b/doc/images/create_hypothese_av_1.png
deleted file mode 100644 (file)
index d6eae0a..0000000
Binary files a/doc/images/create_hypothese_av_1.png and /dev/null differ
diff --git a/doc/images/create_hypothese_ch_1.png b/doc/images/create_hypothese_ch_1.png
deleted file mode 100644 (file)
index 392ef7b..0000000
Binary files a/doc/images/create_hypothese_ch_1.png and /dev/null differ
diff --git a/doc/images/create_hypothese_ch_2.png b/doc/images/create_hypothese_ch_2.png
deleted file mode 100644 (file)
index ce3d944..0000000
Binary files a/doc/images/create_hypothese_ch_2.png and /dev/null differ
diff --git a/doc/images/create_hypothese_ch_3.png b/doc/images/create_hypothese_ch_3.png
deleted file mode 100644 (file)
index d1f146c..0000000
Binary files a/doc/images/create_hypothese_ch_3.png and /dev/null differ
diff --git a/doc/images/create_hypothese_ch_4.png b/doc/images/create_hypothese_ch_4.png
deleted file mode 100644 (file)
index b48f651..0000000
Binary files a/doc/images/create_hypothese_ch_4.png and /dev/null differ
diff --git a/doc/images/create_hypothese_ch_5.png b/doc/images/create_hypothese_ch_5.png
deleted file mode 100644 (file)
index 4151dd8..0000000
Binary files a/doc/images/create_hypothese_ch_5.png and /dev/null differ
diff --git a/doc/images/create_hypothese_gr_1.png b/doc/images/create_hypothese_gr_1.png
deleted file mode 100644 (file)
index 34f937f..0000000
Binary files a/doc/images/create_hypothese_gr_1.png and /dev/null differ
diff --git a/doc/images/create_hypothese_gr_2.png b/doc/images/create_hypothese_gr_2.png
deleted file mode 100644 (file)
index 3153ad4..0000000
Binary files a/doc/images/create_hypothese_gr_2.png and /dev/null differ
diff --git a/doc/images/create_hypothese_zo_1.png b/doc/images/create_hypothese_zo_1.png
deleted file mode 100644 (file)
index 0b4f025..0000000
Binary files a/doc/images/create_hypothese_zo_1.png and /dev/null differ
diff --git a/doc/images/create_hypothese_zo_2.png b/doc/images/create_hypothese_zo_2.png
deleted file mode 100644 (file)
index 09353cf..0000000
Binary files a/doc/images/create_hypothese_zo_2.png and /dev/null differ
diff --git a/doc/images/create_iteration_1.png b/doc/images/create_iteration_1.png
deleted file mode 100644 (file)
index affb028..0000000
Binary files a/doc/images/create_iteration_1.png and /dev/null differ
diff --git a/doc/images/create_iteration_2.png b/doc/images/create_iteration_2.png
deleted file mode 100644 (file)
index 3c02793..0000000
Binary files a/doc/images/create_iteration_2.png and /dev/null differ
diff --git a/doc/images/create_iteration_3.png b/doc/images/create_iteration_3.png
deleted file mode 100644 (file)
index a00ede7..0000000
Binary files a/doc/images/create_iteration_3.png and /dev/null differ
diff --git a/doc/images/create_iteration_4.png b/doc/images/create_iteration_4.png
deleted file mode 100644 (file)
index 4366530..0000000
Binary files a/doc/images/create_iteration_4.png and /dev/null differ
diff --git a/doc/images/create_iteration_5.png b/doc/images/create_iteration_5.png
deleted file mode 100644 (file)
index 92a9ab0..0000000
Binary files a/doc/images/create_iteration_5.png and /dev/null differ
diff --git a/doc/images/create_iteration_6.png b/doc/images/create_iteration_6.png
deleted file mode 100644 (file)
index 339e1e1..0000000
Binary files a/doc/images/create_iteration_6.png and /dev/null differ
diff --git a/doc/images/create_iteration_7.png b/doc/images/create_iteration_7.png
deleted file mode 100644 (file)
index 8816eef..0000000
Binary files a/doc/images/create_iteration_7.png and /dev/null differ
diff --git a/doc/images/create_zone_1.png b/doc/images/create_zone_1.png
deleted file mode 100644 (file)
index aa32ef1..0000000
Binary files a/doc/images/create_zone_1.png and /dev/null differ
diff --git a/doc/images/create_zone_2.png b/doc/images/create_zone_2.png
deleted file mode 100644 (file)
index 1664d52..0000000
Binary files a/doc/images/create_zone_2.png and /dev/null differ
diff --git a/doc/images/create_zone_21.png b/doc/images/create_zone_21.png
deleted file mode 100644 (file)
index 8d156f1..0000000
Binary files a/doc/images/create_zone_21.png and /dev/null differ
diff --git a/doc/images/create_zone_22.png b/doc/images/create_zone_22.png
deleted file mode 100644 (file)
index f27faaa..0000000
Binary files a/doc/images/create_zone_22.png and /dev/null differ
diff --git a/doc/images/create_zone_23.png b/doc/images/create_zone_23.png
deleted file mode 100644 (file)
index 8bce36d..0000000
Binary files a/doc/images/create_zone_23.png and /dev/null differ
diff --git a/doc/images/create_zone_3.png b/doc/images/create_zone_3.png
deleted file mode 100644 (file)
index abaf406..0000000
Binary files a/doc/images/create_zone_3.png and /dev/null differ
diff --git a/doc/images/create_zone_4.png b/doc/images/create_zone_4.png
deleted file mode 100644 (file)
index 26955a8..0000000
Binary files a/doc/images/create_zone_4.png and /dev/null differ
diff --git a/doc/images/dec.pent.png b/doc/images/dec.pent.png
new file mode 100644 (file)
index 0000000..3a90c7d
Binary files /dev/null and b/doc/images/dec.pent.png differ
diff --git a/doc/images/dec_hex.gif b/doc/images/dec_hex.gif
new file mode 100644 (file)
index 0000000..ce3083d
Binary files /dev/null and b/doc/images/dec_hex.gif differ
diff --git a/doc/images/dec_hex.png b/doc/images/dec_hex.png
new file mode 100644 (file)
index 0000000..26a7e26
Binary files /dev/null and b/doc/images/dec_hex.png differ
diff --git a/doc/images/dec_quad_1.png b/doc/images/dec_quad_1.png
new file mode 100644 (file)
index 0000000..5d38a0f
Binary files /dev/null and b/doc/images/dec_quad_1.png differ
diff --git a/doc/images/dec_quad_2.png b/doc/images/dec_quad_2.png
new file mode 100644 (file)
index 0000000..997aaa3
Binary files /dev/null and b/doc/images/dec_quad_2.png differ
diff --git a/doc/images/dec_quad_3.png b/doc/images/dec_quad_3.png
new file mode 100644 (file)
index 0000000..5406288
Binary files /dev/null and b/doc/images/dec_quad_3.png differ
diff --git a/doc/images/dec_quad_4.png b/doc/images/dec_quad_4.png
new file mode 100644 (file)
index 0000000..b0ac794
Binary files /dev/null and b/doc/images/dec_quad_4.png differ
diff --git a/doc/images/dec_tetr_1.gif b/doc/images/dec_tetr_1.gif
new file mode 100644 (file)
index 0000000..c888334
Binary files /dev/null and b/doc/images/dec_tetr_1.gif differ
diff --git a/doc/images/dec_tetr_2.gif b/doc/images/dec_tetr_2.gif
new file mode 100644 (file)
index 0000000..1a4d247
Binary files /dev/null and b/doc/images/dec_tetr_2.gif differ
diff --git a/doc/images/dec_tetr_3.gif b/doc/images/dec_tetr_3.gif
new file mode 100644 (file)
index 0000000..e6471ee
Binary files /dev/null and b/doc/images/dec_tetr_3.gif differ
diff --git a/doc/images/dec_tetr_4.gif b/doc/images/dec_tetr_4.gif
new file mode 100644 (file)
index 0000000..b41bbea
Binary files /dev/null and b/doc/images/dec_tetr_4.gif differ
diff --git a/doc/images/dec_tetr_5.gif b/doc/images/dec_tetr_5.gif
new file mode 100644 (file)
index 0000000..774c368
Binary files /dev/null and b/doc/images/dec_tetr_5.gif differ
diff --git a/doc/images/dec_tetr_6.gif b/doc/images/dec_tetr_6.gif
new file mode 100644 (file)
index 0000000..2a4d853
Binary files /dev/null and b/doc/images/dec_tetr_6.gif differ
diff --git a/doc/images/dec_tetr_7.gif b/doc/images/dec_tetr_7.gif
new file mode 100644 (file)
index 0000000..ec1a043
Binary files /dev/null and b/doc/images/dec_tetr_7.gif differ
diff --git a/doc/images/dec_tria_1.gif b/doc/images/dec_tria_1.gif
new file mode 100644 (file)
index 0000000..e09ed1f
Binary files /dev/null and b/doc/images/dec_tria_1.gif differ
diff --git a/doc/images/dec_tria_2.png b/doc/images/dec_tria_2.png
new file mode 100644 (file)
index 0000000..de9d7de
Binary files /dev/null and b/doc/images/dec_tria_2.png differ
diff --git a/doc/images/hexa1arete.png b/doc/images/hexa1arete.png
new file mode 100644 (file)
index 0000000..a34b5b4
Binary files /dev/null and b/doc/images/hexa1arete.png differ
diff --git a/doc/images/hexa2aretes.png b/doc/images/hexa2aretes.png
new file mode 100644 (file)
index 0000000..5d25873
Binary files /dev/null and b/doc/images/hexa2aretes.png differ
diff --git a/doc/images/hexa3aretes.png b/doc/images/hexa3aretes.png
new file mode 100644 (file)
index 0000000..4eaae9d
Binary files /dev/null and b/doc/images/hexa3aretes.png differ
diff --git a/doc/images/hexaface.png b/doc/images/hexaface.png
new file mode 100644 (file)
index 0000000..6eff557
Binary files /dev/null and b/doc/images/hexaface.png differ
diff --git a/doc/images/homard_1.png b/doc/images/homard_1.png
deleted file mode 100644 (file)
index 8000688..0000000
Binary files a/doc/images/homard_1.png and /dev/null differ
diff --git a/doc/images/homard_d.ico b/doc/images/homard_d.ico
new file mode 100644 (file)
index 0000000..7cc9405
Binary files /dev/null and b/doc/images/homard_d.ico differ
diff --git a/doc/images/intro_1.png b/doc/images/intro_1.png
deleted file mode 100644 (file)
index bfc3bd2..0000000
Binary files a/doc/images/intro_1.png and /dev/null differ
diff --git a/doc/images/intro_31.png b/doc/images/intro_31.png
deleted file mode 100644 (file)
index 175264e..0000000
Binary files a/doc/images/intro_31.png and /dev/null differ
diff --git a/doc/images/intro_32.png b/doc/images/intro_32.png
deleted file mode 100644 (file)
index f4022ca..0000000
Binary files a/doc/images/intro_32.png and /dev/null differ
diff --git a/doc/images/intro_33.png b/doc/images/intro_33.png
deleted file mode 100644 (file)
index a0bd05e..0000000
Binary files a/doc/images/intro_33.png and /dev/null differ
diff --git a/doc/images/intro_34.png b/doc/images/intro_34.png
deleted file mode 100644 (file)
index 9486689..0000000
Binary files a/doc/images/intro_34.png and /dev/null differ
diff --git a/doc/images/intro_35.png b/doc/images/intro_35.png
deleted file mode 100644 (file)
index 7287147..0000000
Binary files a/doc/images/intro_35.png and /dev/null differ
diff --git a/doc/images/intro_36.png b/doc/images/intro_36.png
deleted file mode 100644 (file)
index 2d363da..0000000
Binary files a/doc/images/intro_36.png and /dev/null differ
diff --git a/doc/images/intro_37.png b/doc/images/intro_37.png
deleted file mode 100644 (file)
index c6f7943..0000000
Binary files a/doc/images/intro_37.png and /dev/null differ
diff --git a/doc/images/intro_38.png b/doc/images/intro_38.png
deleted file mode 100644 (file)
index 2d29392..0000000
Binary files a/doc/images/intro_38.png and /dev/null differ
diff --git a/doc/images/intro_39.png b/doc/images/intro_39.png
deleted file mode 100644 (file)
index ad542ba..0000000
Binary files a/doc/images/intro_39.png and /dev/null differ
index 36c447a01ccb36b7689b516dbcddfca8319b41b0..88f3077ea0afdc88fa805a1e5e6164d4a823058f 100644 (file)
Binary files a/doc/images/intro_40.png and b/doc/images/intro_40.png differ
diff --git a/doc/images/intro_9.2.png b/doc/images/intro_9.2.png
new file mode 100644 (file)
index 0000000..416d295
Binary files /dev/null and b/doc/images/intro_9.2.png differ
diff --git a/doc/images/intro_9.3.png b/doc/images/intro_9.3.png
new file mode 100644 (file)
index 0000000..88bfa85
Binary files /dev/null and b/doc/images/intro_9.3.png differ
diff --git a/doc/images/intro_9.4.png b/doc/images/intro_9.4.png
new file mode 100644 (file)
index 0000000..3f5bf9b
Binary files /dev/null and b/doc/images/intro_9.4.png differ
diff --git a/doc/images/lancement_1.png b/doc/images/lancement_1.png
deleted file mode 100644 (file)
index 03b76a9..0000000
Binary files a/doc/images/lancement_1.png and /dev/null differ
diff --git a/doc/images/lancement_2.png b/doc/images/lancement_2.png
deleted file mode 100644 (file)
index d5713d5..0000000
Binary files a/doc/images/lancement_2.png and /dev/null differ
diff --git a/doc/images/lancement_3.png b/doc/images/lancement_3.png
deleted file mode 100644 (file)
index bd1eb64..0000000
Binary files a/doc/images/lancement_3.png and /dev/null differ
diff --git a/doc/images/menu_1.png b/doc/images/menu_1.png
deleted file mode 100644 (file)
index ed5b5c4..0000000
Binary files a/doc/images/menu_1.png and /dev/null differ
diff --git a/doc/images/menu_2.png b/doc/images/menu_2.png
deleted file mode 100644 (file)
index 405f9a8..0000000
Binary files a/doc/images/menu_2.png and /dev/null differ
diff --git a/doc/images/mesh_info_5.png b/doc/images/mesh_info_5.png
new file mode 100644 (file)
index 0000000..e885f4c
Binary files /dev/null and b/doc/images/mesh_info_5.png differ
diff --git a/doc/images/pursue_case_1.png b/doc/images/pursue_case_1.png
new file mode 100644 (file)
index 0000000..7158970
Binary files /dev/null and b/doc/images/pursue_case_1.png differ
diff --git a/doc/images/pursue_case_2.png b/doc/images/pursue_case_2.png
new file mode 100644 (file)
index 0000000..ac3cd9d
Binary files /dev/null and b/doc/images/pursue_case_2.png differ
diff --git a/doc/images/pursue_case_3.png b/doc/images/pursue_case_3.png
new file mode 100644 (file)
index 0000000..f0f8f6f
Binary files /dev/null and b/doc/images/pursue_case_3.png differ
diff --git a/doc/images/yacs_01.png b/doc/images/yacs_01.png
new file mode 100644 (file)
index 0000000..0796703
Binary files /dev/null and b/doc/images/yacs_01.png differ
diff --git a/doc/images/yacs_a_01.png b/doc/images/yacs_a_01.png
new file mode 100644 (file)
index 0000000..9e29132
Binary files /dev/null and b/doc/images/yacs_a_01.png differ
diff --git a/doc/images/yacs_b_01.png b/doc/images/yacs_b_01.png
new file mode 100644 (file)
index 0000000..6fc0e48
Binary files /dev/null and b/doc/images/yacs_b_01.png differ
diff --git a/doc/images/yacs_c_01.png b/doc/images/yacs_c_01.png
new file mode 100644 (file)
index 0000000..5f888df
Binary files /dev/null and b/doc/images/yacs_c_01.png differ
diff --git a/doc/images/yacs_c_02.png b/doc/images/yacs_c_02.png
new file mode 100644 (file)
index 0000000..c8b5d9c
Binary files /dev/null and b/doc/images/yacs_c_02.png differ
diff --git a/doc/images/yacs_c_03.png b/doc/images/yacs_c_03.png
new file mode 100644 (file)
index 0000000..d93e928
Binary files /dev/null and b/doc/images/yacs_c_03.png differ
diff --git a/doc/images/yacs_c_04.png b/doc/images/yacs_c_04.png
new file mode 100644 (file)
index 0000000..110efe9
Binary files /dev/null and b/doc/images/yacs_c_04.png differ
diff --git a/doc/images/yacs_c_05.png b/doc/images/yacs_c_05.png
new file mode 100644 (file)
index 0000000..5dc8c86
Binary files /dev/null and b/doc/images/yacs_c_05.png differ
diff --git a/doc/images/yacs_c_06.png b/doc/images/yacs_c_06.png
new file mode 100644 (file)
index 0000000..ed99290
Binary files /dev/null and b/doc/images/yacs_c_06.png differ
diff --git a/doc/images/yacs_c_07.png b/doc/images/yacs_c_07.png
new file mode 100644 (file)
index 0000000..fbddf89
Binary files /dev/null and b/doc/images/yacs_c_07.png differ
diff --git a/doc/images/yacs_c_08.png b/doc/images/yacs_c_08.png
new file mode 100644 (file)
index 0000000..fcd0527
Binary files /dev/null and b/doc/images/yacs_c_08.png differ
diff --git a/doc/images/yacs_c_09.png b/doc/images/yacs_c_09.png
new file mode 100644 (file)
index 0000000..8f1282b
Binary files /dev/null and b/doc/images/yacs_c_09.png differ
diff --git a/doc/images/yacs_d_01.png b/doc/images/yacs_d_01.png
new file mode 100644 (file)
index 0000000..3963ecc
Binary files /dev/null and b/doc/images/yacs_d_01.png differ
diff --git a/doc/index.rst b/doc/index.rst
deleted file mode 100644 (file)
index 7589e93..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-.. HOMARD documentation master file, created by
-   sphinx-quickstart on Tue Jan  5 08:51:14 2010.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-.. |logo| image:: images/HOMARD.png
-
-Documentation du composant HOMARD |logo|
-----------------------------------------
-
-HOMARD est le composant qui permet l'adaptation de maillage au sein de la plateforme Salome.
-
-*HOMARD est une marque déposée d'EDF.*
-
-Table des matières de ce mode d'emploi
-""""""""""""""""""""""""""""""""""""""
-
-.. toctree::
-   :maxdepth: 2
-
-   intro
-   gui_usage
-   tui_usage
-   tutorials
-
-
-Index et tables
-"""""""""""""""
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-* :ref:`glossaire`
diff --git a/doc/intro.rst b/doc/intro.rst
deleted file mode 100644 (file)
index a40df79..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-.. _gui_intro:
-
-Introduction
-============
-
-Présentation générale
-"""""""""""""""""""""
-Le logiciel HOMARD est destiné à adapter les maillages dans le cadre des codes de calculs par éléments ou volumes finis. Ce logiciel, réalisé par EDF R&D, procède par raffinement et déraffinement des maillages bidimensionnels ou tridimensionnels. Il est conçu pour être utilisé indépendamment du code de calcul auquel il est couplé.
-
-Raffiner le maillage signifie découper des mailles désignées selon des indications founies par l'utilisateur. Déraffiner le maillage signifie revenir en arrière sur des découpages précédemment réalisés : ainsi, en aucun cas HOMARD ne peut simplifier un maillage existant qui aura été créé trop fin. Le déraffinement prend toute son importance dans les calculs quand la zone d'intérêt se déplace au cours du calcul pour ne plus tenir compte de raffinements précédemment réalisés et qui deviennent inutiles. On en trouvera une illustration au bas de cette page.
-
-HOMARD sait traiter des maillages en 2 ou 3 dimensions et comportant les mailles suivantes :
-   - mailles-points
-   - segments
-   - triangles
-   - quadrangles
-   - tétraèdres
-   - hexaèdres
-   - prismes
-
-Ces mailles peuvent être présentes simultanément. Par exemple, HOMARD saura adapter un maillage comportant des triangles et des quadrangles.
-Les noeuds acceptés sont évidemment les noeuds qui sont les sommets des mailles, ce qui correspond à la description classique « en degré 1 » . Si les éléments sont décrits « en degré 2 », les noeuds complémentaires sont gérés. En revanche, il ne peut pas y avoir cohabitation de mailles décrites en degré 1 et d'autres décrites en degré 2. Enfin, HOMARD sait prendre en compte des noeuds isolés, qui n'appartiendraient à aucune définition de mailles : ils ressortiront tels quels du processus d'adaptation.
-
-Le cas des pyramides est à part. Pour un maillage comportant des hexaèdres ou des prismes, la mise en conformité du maillage issu du raffinement crée des pyramides pour assurer la liaison entre deux régions de niveaux de raffinement différents. Ces pyramides sont gérées comme toutes les mailles de transition et ne sont pas redécoupées par la suite. En revanche, si le maillage initial contient des pyramides, HOMARD ne saura pas l'adapter et émettra un message d'erreur. Dans certains cas particuliers, on pourra néanmoins traiter un tel maillage, comme il est décrit dans la rubrique 'Options avancées' de :ref:`gui_create_case`).
-
-Plusieurs motivations apparaissent pour adapter un maillage :
-
-  - on veut simplifier la réalisation du maillage d'une géométrie complexe : on part d'un maillage grossier et on confie à un processus automatique la charge de le raffiner.
-  - on veut s'assurer de la convergence de la solution numérique : plutôt que de réaliser à la main des maillages de plus en plus fins, on laisse le logiciel chercher lui-même les endroits où il faudrait affiner le maillage pour augmenter la précision du résultat.
-  - les conditions du calcul changent au cours de son déroulement : les zones qui doivent être maillées finement se déplacent. Si on maille fin partout dès le début, le maillage est trop gros. En adaptant au fur et à mesure, le maillage ne sera fin qu'aux endroits nécessaires : sa taille sera réduite et la qualité de la solution sera bonne.
-
-Dans tous les cas, le principe de l'adaptation de maillage reste le même. Sur le maillage de départ, on réalise le calcul standard. Avec une analyse de la solution numérique obtenue, on estime l'erreur qui a été commise par rapport à la solution réelle. Cette estimation se représente par une valeur d'indicateur d'erreur dans chaque maille du calcul. A partir de là, on applique le principe suivant : les mailles où l'indicateur d'erreur est fort devraient être plus petites et, réciproquement, les mailles où l'indicateur d'erreur est faible pourraient être plus grandes. Avec cette information, on alimente HOMARD qui va modifier le maillage en conséquence. Sur le nouveau maillage, on recommencera alors le calcul.
-Schématiquement, une itération d'adaptation de maillage se présente ainsi. Le logiciel calcule la solution numérique sur le maillage n°k, puis en déduit les valeurs de l'indicateur d'erreur sur tout le maillage. A partir de la connaissance du maillage n°k et de l'indicateur n°k, HOMARD crée le nouveau maillage n°k+1.
-
-.. image:: images/intro_1.png
-   :align: center
-
-Au final, la chaîne complète part du maillage initial produit par un mailleur. Elle comprend des maillons successifs (calcul d'indicateur / adaptation) comme sur la figure ci-après.
-
-.. image:: images/intro_2.png
-   :align: center
-
-Des variantes de ce schéma de base sont possibles. Si aucun calcul d'erreur n'est disponible dans le logiciel couplé, on peut utiliser un champ pour piloter l'adaptation. Un champ de contraintes en mécaniques peut être utilisé : raffiner là où les contraintes sont importantes est souvent efficace pour améliorer la qualité de la simulation. On peut également adapter en fonction du saut d'une variable d'une maille à sa voisine ou dans une zone connue a priori. Grâce à ses nombreuses options, HOMARD permet d'envisager de multiples scénarios d'adaptation de maillage.
-
-.. note::
-  Pour une description plus complète, voir :download:`Description générale de HOMARD <files/HOMARD_0.pdf>`.
-
-
-Quelques illustrations de maillage adaptés
-""""""""""""""""""""""""""""""""""""""""""
-.. index:: single: illustration
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_3.png                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_4.png                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_5.png                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_6.png                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_7.png                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-|                                                               |
-| .. image:: images/intro_8.gif                                 |
-|    :align: center                                             |
-|                                                               |
-+---------------------------------------------------------------+
-
-Démarrage rapide
-""""""""""""""""
-.. index:: single: démarrage
-.. index:: single: exemple
-
-L'ensemble des options de pilotage du module HOMARD dans Salome est décrit dans le :ref:`gui_usage`. Mais on trouvera ici le B.A. BA pour découvrir l'utilisation de HOMARD à partir d'un exemple simple. Imaginons que l'on a effectué un calcul de thermique sur un maillage donné. On a récupéré en sortie de ce calcul un fichier au format MED, contenant le maillage et le champ des températures aux noeuds. On aimerait adapter le maillage de telle sorte que l'écart de température entre deux noeuds voisins soit inférieur à une valeur donnée.
-
-La première action nécessite de lancer le module HOMARD, en créant une nouvelle étude, selon le principe qui a été retenu pour tous les autres modules de Salome.
-
-.. image:: images/homard_1.png
-   :align: center
-
-Une fois le module HOMARD activé, on crée un cas par le choix "*Nouveau cas*" dans le menu HOMARD. La fenêtre suivante apparaît :
-
-.. image:: images/intro_31.png
-   :align: center
-
-Il faut fournir deux informations : le répertoire qui contiendra les fichiers produits par les adaptations successives et le fichier issu du calcul que l'on vient de faire. On valide par "Appliquer et fermer".
-
-.. image:: images/intro_32.png
-   :align: center
-
-L'arbre d'études est enrichi de ce cas. On déplie le cas jusqu'à afficher le maillage correspondant à l'itération 0. On désigne cette itération initiale et on demande une nouvelle itération par "*Nouvelle itération*" dans le menu HOMARD ou à la souris. La fenêtre suivante apparaît :
-
-.. image:: images/intro_33.png
-   :align: center
-
-On désigne le fichier issu du calcul que l'on vient de faire et qui contient le champ de température. C'est le même que celui qui a été donné dans la définition du cas.
-
-.. image:: images/intro_34.png
-   :align: center
-
-On clique sur "Nouveau" dans la rubrique hypothèse. La fenêtre suivante apparaît :
-
-.. image:: images/intro_35.png
-   :align: center
-
-On modifie les options par défaut pour correspondre à notre choix de pilotage de l'adaptation. La sélection d'un pilotage par les saut entre éléments et d'un seuil absolu de 4.0 va demander le découpage de chaque arête de maille où le température varie de plus de 4.0 degrés entre les deux extrémités de l'arête.
-
-.. image:: images/intro_36.png
-   :align: center
-
-On valide par "Appliquer et fermer" cette création d'hypothése, puis la création de la nouvelle itération. On se retrouve avec un arbre d'études enrichi avec la description de l'hypothèse créée et de l'itération à calculer, repérée par une icone "en attente".
-
-Lancer l'adaptation s'obtient en sélectionnant l'itération à calculer. On choisit ensuite "*Calculer*" dans le menu HOMARD ou à la souris. L'arbre d'études s'enrichit de fichiers d'informations et du nom du fichier au format MED qui contient le nouveau maillage, ``maill.01.med``. On remarque qu'il est placé dans le répertoire qui a été désigné à la création du cas.
-
-.. image:: images/intro_37.png
-   :align: center
-
-A ce stade, on va utiliser ce nouveau maillage pour un deuxième calcul, dans les mêmes conditions que le premier. Une fois que ce nouveau calcul est achevé, on peut décider de poursuivre le processus d'adaptation. Pour cela on revient dans Salome et on active le module HOMARD. On désigne l'itération que l'avait calculée précédemment "*Iter_1*" et on demande une nouvelle itération. La fenêtre suivante apparaît :
-
-.. image:: images/intro_38.png
-   :align: center
-
-Comme on continue l'adaptation avec le même critére de saut de température entre noeuds voisins, on garde l'hypothèse "*Hypo_1*". Il suffit de désigner le fichier issu du calcul que l'on vient de faire et qui contient le nouveau champ de température.
-
-.. image:: images/intro_39.png
-   :align: center
-
-Comme précédemment, on lance l'adaptation et on récupère les résultats dans le répertoire du cas, dont le maillage ``maill.02.med``.
-
-.. image:: images/intro_40.png
-   :align: center
-
-On peut alors lancer un nouveau calcul sur ce nouveau maillage et poursuiver cette alternance calcul/adaptation jusqu'à l'obtention du résultat attendu.
diff --git a/doc/tui_create_boundary.rst b/doc/tui_create_boundary.rst
deleted file mode 100644 (file)
index 9b2992b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-.. _tui_create_boundary:
-
-La frontière
-============
-
-.. index:: single: boundary
-.. index:: single: frontière
-.. index:: single: cylindre
-.. index:: single: sphere
-
-Les variables sont décrites dans :ref:`gui_create_boundary`.
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-Ces méthodes retournent une instance de la classe boundary.
-
-+----------------------------------------------------------------------------------------+
-+----------------------------------------------------------------------------------------+
-| .. module:: CreateBoundaryDi                                                           |
-|                                                                                        |
-| **CreateBoundaryDi(boundary_name, mesh_name, mesh_file)**                              |
-|                                                                                        |
-|     - ``boundary_name`` : le nom de la frontière discrète                              |
-|     - ``mesh_name`` : le nom du maillage de la frontière                               |
-|     - ``mesh_file`` : le nom du fichier contenant ce maillage                          |
-+----------------------------------------------------------------------------------------+
-| .. module:: CreateBoundaryCylinder                                                     |
-|                                                                                        |
-| **CreateBoundaryCylinder(boundary_name, Xcen, Ycen, Zcen, Xaxe, Yaxe, Zaxe, R)**       |
-|                                                                                        |
-|     - ``boundary_name`` : le nom de la frontière analytique basée sur un cylindre      |
-|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées d'un point sur l'axe du cylindre      |
-|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                                  |
-|     - ``R`` : rayon du cylindre                                                        |
-+----------------------------------------------------------------------------------------+
-| .. module:: CreateBoundarySphere                                                       |
-|                                                                                        |
-| **CreateBoundarySphere(boundary_name, Xcen, Ycen, Zcen, R)**                           |
-|                                                                                        |
-|     - ``boundary_name`` : le nom de la frontière analytique basée sur une sphere       |
-|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère                |
-|     - ``R`` : rayon de la sphère                                                       |
-+----------------------------------------------------------------------------------------+
-
-Méthodes de la classe boundary
-""""""""""""""""""""""""""""""
-
-+-------------------------------------------------------------------+
-+-------------------------------------------------------------------+
-| .. module:: GetName                                               |
-|                                                                   |
-| **GetName()**                                                     |
-|     Retourne le nom de la frontière                               |
-+-------------------------------------------------------------------+
-| .. module:: GetBoundaryType                                       |
-|                                                                   |
-| **GetBoundaryType()**                                             |
-|     Retourne le type de la frontière :                            |
-|                                                                   |
-|         * 0 : discrète                                            |
-|         * 1 : cylindre                                            |
-|         * 2 : sphère                                              |
-+-------------------------------------------------------------------+
-| .. module:: GetCoords                                             |
-|                                                                   |
-| **GetCoords()**                                                   |
-|     Retourne un tableau contenant les coordonnées de la frontière |
-|     dans l'ordre d'entrée dans le CreateBoundaryXXXX associé      |
-+-------------------------------------------------------------------+
-
-
-Exemple
-"""""""
-Création d'une frontière discrète, d'une frontière sphèrique, puis d'une frontière cylindrique : ::
-
-    inter = homard.CreateBoundaryDi("INTERSECTION", 'PIQUAGE', dircase+'/tutorial_4.fr.med')
-    fron_1 = homard.CreateBoundarySphere("FRON_1", 12.3, 3.4, .56, 6.5)
-    fron_2 = homard.CreateBoundaryCylinder('CYL_1', 0.0, 25., -25., 25., 50., 75., 100.)
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_create_boundary`
diff --git a/doc/tui_create_case.rst b/doc/tui_create_case.rst
deleted file mode 100644 (file)
index 202c791..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-.. _tui_create_case:
-
-Le cas
-======
-.. index:: single: cas
-.. index:: single: type de conformité
-.. index:: single: maillage;initial
-
-Les variables sont décrites dans :ref:`gui_create_case`.
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: CreateCase                                        |
-|                                                               |
-| **CreateCase(case_name, mesh_name, mesh_file)**               |
-|     Retourne une instance de la classe cas                    |
-|                                                               |
-|     - ``case_name`` : le nom du cas                           |
-|     - ``mesh_name`` : le nom du maillage initial              |
-|     - ``mesh_file`` : le nom du fichier contenant ce maillage |
-|                                                               |
-| Par défaut :                                                  |
-|                                                               |
-|  * le répertoire des résultats est ``/tmp``                   |
-|  * l'adaptation est conforme                                  |
-+---------------------------------------------------------------+
-
-
-Méthodes de la classe cas
-"""""""""""""""""""""""""
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: GetName                                           |
-|                                                               |
-| **GetName()**                                                 |
-|     Retourne le nom du cas                                    |
-+---------------------------------------------------------------+
-| .. module:: SetDirName                                        |
-|                                                               |
-| **SetDirName(dirname)**                                       |
-|                                                               |
-|     - ``dirname`` : le nom du répertoire des résutats         |
-+---------------------------------------------------------------+
-| .. module:: GetDirName                                        |
-|                                                               |
-| **GetDirName()**                                              |
-|     Retourne le nom du répertoire des résutats associé au cas |
-+---------------------------------------------------------------+
-| .. module:: SetConfType                                       |
-|                                                               |
-| **SetConfType(conf_type)**                                    |
-|                                                               |
-|     - ``conf_type`` : entier précisant le mode de conformité  |
-|                                                               |
-|         * 1 : conforme                                        |
-|         * 2 : non conforme avec 1 noeud par maille            |
-|         * 3 : non conforme avec 1 noeud par arete de maille   |
-|         * 4 : non conforme quelconque                         |
-+---------------------------------------------------------------+
-| .. module:: GetConfType                                       |
-|                                                               |
-| **GetConfType()**                                             |
-|     Retourne le type de conformité                            |
-+---------------------------------------------------------------+
-| .. module:: GetIter0Name                                      |
-|                                                               |
-| **GetIter0Name()**                                            |
-|     Retourne le nom de l'itération 0, associée au maillage    |
-|     initial. Ce nom est mis automatiquement par le module     |
-|     HOMARD et doit être utilisé pour enchaîner les adaptations|
-+---------------------------------------------------------------+
-| .. module:: AddBoundaryGroup                                  |
-|                                                               |
-| **AddBoundaryGroup(boundary, group)**                         |
-|                                                               |
-|     - ``boundary`` : nom d'une frontière courbe à suivre      |
-|                                                               |
-|     Pour une frontière discrète :                             |
-|                                                               |
-|     . si toutes les lignes courbes sont suivies, le second    |
-|       argument est une chaîne vide.                           |
-|     . si seulement certaines lignes courbes sont suivies,     |
-|       ``group`` est le nom d'un groupe de segments à suivre.  |
-|                                                               |
-|     Pour une frontière analytique :                           |
-|                                                               |
-|     - ``group`` : nom d'un groupe de faces placées sur la     |
-|       frontière                                               |
-+---------------------------------------------------------------+
-
-Les options avancées
-^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: SetPyram                                          |
-|                                                               |
-| **SetPyram(option)**                                          |
-|                                                               |
-|     - ``option`` : entier précisant le statut des pyramides   |
-|       éventuellement présentes dans le maillage initial       |
-|                                                               |
-|         * 0 : pyramides refusées (défaut)                     |
-|         * 1 : pyramides autorisées                            |
-+---------------------------------------------------------------+
-| .. module:: GetPyram                                          |
-|                                                               |
-| **GetPyram()**                                                |
-|     Retourne le statut accordé aux pyramides éventuellement   |
-|     présentes dans le maillage initial                        |
-+---------------------------------------------------------------+
-
-
-Exemple
-"""""""
-La création de l'objet case_1 se fait ainsi : ::
-
-    case_name = "CAS_1"
-    mesh_name = "MAILL"
-    mesh_file = "/local00/Salome/Adapt/m0.med"
-    case_1 = homard.CreateCase(case_name, mesh_name, mesh_file)
-    dirname = "/local00/Salome/Adapt/resu"
-    case_1.SetDirName(dirname)
-    case_1.SetConfType(1)
-    case_1.AddBoundaryGroup( 'intersection', '' )
-    case_1.AddBoundaryGroup( 'cyl_1', 'T1_EXT' )
-    case_1.AddBoundaryGroup( 'cyl_1', 'T2_EXT' )
-    case_1.AddBoundaryGroup( 'cyl_2', 'T_INT' )
-
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_create_case`
-
-
diff --git a/doc/tui_create_hypothese.rst b/doc/tui_create_hypothese.rst
deleted file mode 100644 (file)
index b9b7d85..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-.. _tui_create_hypothese:
-
-L'hypothèse
-===========
-
-.. index:: single: itération
-.. index:: single: hypothèse
-.. index:: single: zone
-
-Les variables sont décrites dans :ref:`gui_create_hypothese`.
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: CreateHypothesis                                  |
-|                                                               |
-| **CreateHypothesis(hypo_name)**                               |
-|     Retourne une instance de la classe hypothese              |
-|                                                               |
-|     - ``hypo_name`` : le nom de l'hypothèse                   |
-+---------------------------------------------------------------+
-| .. module:: AssociateHypoZone                                 |
-|                                                               |
-| **AssociateHypoZone(hypo_name, zone_name, type_use)**         |
-|                                                               |
-|     - ``hypo_name`` : le nom de l'hypothèse                   |
-|     - ``zone_name`` : le nom de la zone à associer            |
-|     - ``type_use``  : entier précisant l'usage de la zone     |
-|                                                               |
-|         * 1 : raffinement                                     |
-|         * -1 : déraffinement                                  |
-+---------------------------------------------------------------+
-
-Méthodes de la classe hypothese
-"""""""""""""""""""""""""""""""
-
-Généralités
-^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: GetName                                           |
-|                                                               |
-| **GetName()**                                                 |
-|     Retourne le nom de l'hypothèse                            |
-+---------------------------------------------------------------+
-| .. module:: SetAdapRefinUnRef                                 |
-|                                                               |
-| **SetAdapRefinUnRef(Adap, Refin, UnRef)**                     |
-|                                                               |
-|     - ``Adap`` : entier précisant le type d'adaptation        |
-|                                                               |
-|         * -1 : uniforme                                       |
-|         * 0 : selon des zones                                 |
-|         * 1 : selon un champ                                  |
-|                                                               |
-|     - ``Refin`` : entier précisant si le raffinement est actif|
-|                                                               |
-|         * 0 : inactif                                         |
-|         * 1 : actif                                           |
-|                                                               |
-|     - ``UnRef`` : entier précisant si déraffinement est actif |
-|                                                               |
-|         * 0 : inactif                                         |
-|         * 1 : actif                                           |
-|                                                               |
-+---------------------------------------------------------------+
-| .. module:: GetAdapType                                       |
-|                                                               |
-| **GetAdapType()**                                             |
-|     Retourne le type d'adaptation                             |
-+---------------------------------------------------------------+
-| .. module:: GetRefinType                                      |
-|                                                               |
-| **GetRefinType()**                                            |
-|     Retourne le type de raffinement                           |
-+---------------------------------------------------------------+
-| .. module:: GetUnRefType                                      |
-|                                                               |
-| **GetUnRefType()**                                            |
-|     Retourne le type de déraffinement                         |
-+---------------------------------------------------------------+
-
-Le champ et les seuils
-^^^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: SetField                                          |
-|                                                               |
-| **SetField(field_name)**                                      |
-|                                                               |
-|     - ``field_name`` : le nom du champ                        |
-+---------------------------------------------------------------+
-| .. module:: GetFieldName                                      |
-|                                                               |
-| **GetFieldName()**                                            |
-|     Retourne le nom du champ                                  |
-+---------------------------------------------------------------+
-| .. module:: SetUseField                                       |
-|                                                               |
-| **SetUseField(use_field)**                                    |
-|                                                               |
-|     - ``use_field`` : entier précisant l'usage du champ       |
-|                                                               |
-|        * 0 : valeur par élément (défaut)                      |
-|        * 1 : saut entre un élément et ses voisins             |
-+---------------------------------------------------------------+
-| .. module:: SetRefinThr                                       |
-|                                                               |
-| **SetRefinThr(type_thres, threshold)**                        |
-|                                                               |
-|     - ``type_thres`` : entier précisant le type de seuil en   |
-|       raffinement                                             |
-|                                                               |
-|        * 1 : valeur absolue                                   |
-|        * 2 : valeur relative en %                             |
-|        * 3 : fraction des mailles en %                        |
-|                                                               |
-|     - ``threshold`` : valeur du seuil                         |
-+---------------------------------------------------------------+
-| .. module:: GetRefinThrType                                   |
-|                                                               |
-| **GetRefinThrType()**                                         |
-|     Retourne le type de seuil de raffinement                  |
-+---------------------------------------------------------------+
-| .. module:: SetUnRefThr                                       |
-|                                                               |
-| **SetUnRefThr(type_thres, threshold)**                        |
-|                                                               |
-|     - ``type_thres`` : entier précisant le type de seuil en   |
-|       déraffinement                                           |
-|                                                               |
-|        * 1 : valeur absolue                                   |
-|        * 2 : valeur relative en %                             |
-|        * 3 : fraction des mailles en %                        |
-|                                                               |
-|     - ``threshold`` : valeur du seuil                         |
-+---------------------------------------------------------------+
-| .. module:: GetUnRefThrType                                   |
-|                                                               |
-| **GetUnRefThrType()**                                         |
-|     Retourne le type de seuil de déraffinement                |
-+---------------------------------------------------------------+
-
-
-Les composantes du champ
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: AddComp                                           |
-|                                                               |
-| **AddComp(comp_name)**                                        |
-|                                                               |
-|     - ``comp_name`` : nom d'une composante à prendre en       |
-|       compte                                                  |
-+---------------------------------------------------------------+
-| .. module:: SetUseComp                                        |
-|                                                               |
-| **SetUseComp(use_comp)**                                      |
-|                                                               |
-|     - ``use_comp`` : entier précisant l'usage des composantes |
-|                                                               |
-|        * 0 : norme L2 (défaut)                                |
-|        * 1 : norme infinie                                    |
-|        * 2 : valeur relative, si une seule composante         |
-+---------------------------------------------------------------+
-| .. module:: GetListComp                                       |
-|                                                               |
-| **GetListComp()**                                             |
-|     Retourne la liste des composantes utilisées               |
-+---------------------------------------------------------------+
-
-Le filtrage par les groupes
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: AddGroup                                          |
-|                                                               |
-| **AddGroup(group_name)**                                      |
-|                                                               |
-|     - ``group_name`` : nom du groupe à prendre en compte      |
-+---------------------------------------------------------------+
-| .. module:: GetGroups                                         |
-|                                                               |
-| **GetGroups()**                                               |
-|     Retourne la liste des groupes utilisés pour le filtrage   |
-+---------------------------------------------------------------+
-
-Les options avancées
-^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: SetNivMax                                         |
-|                                                               |
-| **SetNivMax(nivmax)**                                         |
-|                                                               |
-|     - ``nivmax`` : niveau de raffinement à ne pas dépasser    |
-+---------------------------------------------------------------+
-| .. module:: GetNivMax                                         |
-|                                                               |
-| **GetNivMax()**                                               |
-|     Retourne le niveau maximal de raffinement                 |
-+---------------------------------------------------------------+
-| .. module:: SetDiamMin                                        |
-|                                                               |
-| **SetDiamMin(diammin)**                                       |
-|                                                               |
-|     - ``diammin`` : diamètre minimal voulu pour une maille    |
-+---------------------------------------------------------------+
-| .. module:: GetDiamMin                                        |
-|                                                               |
-| **GetDiamMin()**                                              |
-|     Retourne le diamètre minimal voulu                        |
-+---------------------------------------------------------------+
-
-
-Exemple
-"""""""
-La création de l'objet hypo_1 se fait ainsi : ::
-
-    hypo_1 = homard.CreateHypothesis("HypoField")
-    hypo_1.SetAdapRefinUnRef(1, 1, 0)
-    hypo_1.SetField("INDICATEUR")
-    hypo_1.AddComp("INDX")
-    hypo_1.AddComp("INDZ")
-    hypo_1.SetRefinThr(1, 80.)
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_create_hypothese`
-
-.. warning::
-  En mode graphique, si on édite une hypothèse et que l'on modifie une de ses caractéristiques, par exemple le seuil de raffinement, toutes les itérations qui ont été calculées précédemment avec cette hypothèse sont invalidées. En mode python, cela n'est plus vrai : les itérations restent telles quelles.
diff --git a/doc/tui_create_iteration.rst b/doc/tui_create_iteration.rst
deleted file mode 100644 (file)
index a9590dc..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-.. _tui_create_iteration:
-
-L'itération
-===========
-
-.. index:: single: itération
-.. index:: single: hypothèse
-.. index:: single: zone
-
-Les variables sont décrites dans :ref:`gui_create_iteration`.
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: CreateIteration                                   |
-|                                                               |
-| **CreateIteration(iter_name, iter_parent_name)**              |
-|     Retourne une instance de la classe iteration              |
-|                                                               |
-|     - ``iter_name`` : le nom de l'itération                   |
-|     - ``iter_parent_name`` : le nom de l'itération mère       |
-|                                                               |
-| Par défaut :                                                  |
-|                                                               |
-|  * le maillage produit a le même nom que l'itération          |
-+---------------------------------------------------------------+
-| .. module:: AssociateIterHypo                                 |
-|                                                               |
-| **AssociateIterHypo(iter_name, hypo_name)**                   |
-|                                                               |
-|     - ``iter_name`` : le nom de l'itération                   |
-|     - ``hypo_name`` : le nom de l'hypothèse à associer        |
-+---------------------------------------------------------------+
-
-Méthodes de la classe iteration
-"""""""""""""""""""""""""""""""
-
-Généralités
-^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. index:: single: Compute                                    |
-|                                                               |
-| **Compute(option)**                                           |
-|     Calcule le maillage correspondant à l'itération           |
-|                                                               |
-|     - ``option`` : un entier précisant ce qui se passe quand  |
-|       des fichiers de résultats existent déjà                 |
-|                                                               |
-|         * 0 : arrêt en erreur                                 |
-|         * 1 : écrasement des anciens fichiers                 |
-|                                                               |
-|     Retourne un entier :                                      |
-|         * 0 : adaptation réussie                              |
-|         * autre valeur : problème                             |
-+---------------------------------------------------------------+
-| .. module:: GetName                                           |
-|                                                               |
-| **GetName()**                                                 |
-|     Retourne le nom de l'itération                            |
-+---------------------------------------------------------------+
-| .. module:: GetNumber                                         |
-|                                                               |
-| **GetNumber()**                                               |
-|     Retourne le numéro de l'itération.                        |
-|                                                               |
-|     L'itération 0 est celle associée au maillage initial.     |
-|     Ensuite, une itération de numéro N est issue de           |
-|     l'adaptation d'une itération de numéro N-1.               |
-+---------------------------------------------------------------+
-| .. module:: GetIterParent                                     |
-|                                                               |
-| **GetIterParent()**                                           |
-|     Retourne le nom de l'itération mère                       |
-+---------------------------------------------------------------+
-| .. module:: GetHypoName                                       |
-|                                                               |
-| **GetHypoName()**                                             |
-|     Retourne le nom de l'hypothèse associée                   |
-+---------------------------------------------------------------+
-| .. module:: GetCaseName                                       |
-|                                                               |
-| **GetCaseName()**                                             |
-|     Retourne le nom du cas associé                            |
-+---------------------------------------------------------------+
-| .. module:: GetState                                          |
-|                                                               |
-| **GetState()**                                                |
-|     Retourne l'état de l'itération                            |
-|                                                               |
-|     - ``0`` : itération non calculée                          |
-|     - ``1`` : itération calculée correctement                 |
-+---------------------------------------------------------------+
-
-Informations sur les maillages
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: GetMeshName                                       |
-|                                                               |
-| **GetMeshName()**                                             |
-|     Retourne le nom du maillage produit                       |
-+---------------------------------------------------------------+
-| .. module:: SetMeshFile                                       |
-|                                                               |
-| **SetMeshFile(mesh_file)**                                    |
-|                                                               |
-|     - ``mesh_file`` : le nom du fichier qui contiendra        |
-|       le maillage produit                                     |
-+---------------------------------------------------------------+
-| .. module:: GetMeshFile                                       |
-|                                                               |
-| **GetMeshFile()**                                             |
-|     Retourne le nom du fichier du maillage produit            |
-+---------------------------------------------------------------+
-
-Informations sur le champ
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: SetFieldFile                                      |
-|                                                               |
-| **SetFieldFile(field_file)**                                  |
-|                                                               |
-|     - ``field_file`` : le nom du fichier contenant le champ   |
-+---------------------------------------------------------------+
-| .. module:: SetTimeStepRank                                   |
-|                                                               |
-| **SetTimeStepRank(TimeStep, Rank)**                           |
-|                                                               |
-|     - ``TimeStep`` : l'instant où est pris le champ           |
-|     - ``Rank`` : le numéro d'ordre où est pris le champ       |
-+---------------------------------------------------------------+
-| .. module:: GetFieldFileName                                  |
-|                                                               |
-| **GetFieldFileName()**                                        |
-|     Retourne le nom du fichier du champ                       |
-+---------------------------------------------------------------+
-| .. module:: GetTimeStep                                       |
-|                                                               |
-| **GetTimeStep()**                                             |
-|     Retourne l'instant où est pris le champ                   |
-+---------------------------------------------------------------+
-| .. module:: GetRank                                           |
-|                                                               |
-| **GetRank()**                                                 |
-|     Retourne le numéro d'ordre où est pris le champ           |
-+---------------------------------------------------------------+
-
-Exemple
-"""""""
-.. index:: single: maillage;initial
-
-Pour la création de la première itération, il faut récupérer le nom qui a été donné à celle qui correspond au maillage initial. Ce nom s'obtient avec la méthode ``GetIter0Name`` appliquée au cas. ::
-
-    iter_name = "Iteration_1"
-    iter_1 = homard.CreateIteration(iter_name, case_1.GetIter0Name())
-    iter_1.SetField(field_file, 0, 0)
-    iter_1.SetMeshName("maill_01")
-    iter_1.SetMeshFile("/local00/M.01.med")
-    homard.AssociateIterHypo(iter_name, "HypoField")
-    codret = iter_1.Compute(1)
-
-Pour la création d'une itération suivante, on donnera le nom de l'itération parent de laquelle on part. ::
-
-    iter_name = "Iteration_2"
-    iter_2 = homard.CreateIteration(iter_name, "Iteration_1")
-    iter_2.SetField(field_file, 0, 0)
-    iter_2.SetMeshName("maill_02")
-    iter_2.SetMeshFile("/local00/M.02.med")
-    homard.AssociateIterHypo(iter_name, "HypoField")
-    codret = iter_2.Compute(1)
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_create_iteration`
diff --git a/doc/tui_create_zone.rst b/doc/tui_create_zone.rst
deleted file mode 100644 (file)
index 9911c41..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-.. _tui_create_zone:
-
-La zone
-=======
-
-.. index:: single: zone
-.. index:: single: boite
-.. index:: single: sphere
-.. index:: single: cylindre
-.. index:: single: tuyau
-.. index:: single: disque
-.. index:: single: disque avec trou
-.. index:: single: 2D
-
-Les variables sont décrites dans :ref:`gui_create_zone`.
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-
-Ces méthodes retournent une instance de la classe zone.
-
-+----------------------------------------------------------------------------------+
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneBox                                                        |
-|                                                                                  |
-| **CreateZoneBox(zone_name, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax)**                 |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un parallélépipède             |
-|     - ``Xmin``, ``Xmax`` : coordonnées extrêmes selon X                          |
-|     - ``Ymin``, ``Ymax`` : coordonnées extrêmes selon Y                          |
-|     - ``Zmin``, ``Zmax`` : coordonnées extrêmes selon Z                          |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneCylinder                                                   |
-|                                                                                  |
-| **CreateZoneCylinder(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H)**   |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un cylindre                    |
-|     - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base           |
-|       positionné sur l'axe                                                       |
-|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                            |
-|     - ``R`` : rayon du cylindre                                                  |
-|     - ``H`` : hauteur du cylindre                                                |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZonePipe                                                       |
-|                                                                                  |
-| **CreateZonePipe(zone_name, Xbase, Ybase, Zbase, Xaxe, Yaxe, Zaxe, R, H, Rint)** |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un tuyau                       |
-|     - ``Xbase``, ``Ybase``, ``Zbase`` : coordonnées d'un point de base           |
-|       positionné sur l'axe                                                       |
-|     - ``Xaxe``, ``Yaxe``, ``Zaxe`` : vecteur de l'axe                            |
-|     - ``R`` : rayon externe du tuyau                                             |
-|     - ``H`` : hauteur du tuyau                                                   |
-|     - ``R`` : rayon interne du tuyau                                             |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneSphere                                                     |
-|                                                                                  |
-| **CreateZoneSphere(zone_name, Xcen, Ycen, Zcen, R)**                             |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur une sphère                     |
-|     - ``Xcen``, ``Ycen``, ``Zcen`` : coordonnées du centre de la sphère          |
-|     - ``R`` : rayon de la sphère                                                 |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneBox2D                                                      |
-|                                                                                  |
-| **CreateZoneBox2D(zone_name, Umin, Umax, Vmin, Vmax, Orient)**                   |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un rectangle                   |
-|     - ``Umin``, ``Umax`` : coordonnées extrêmes pour la 1ère dimension           |
-|     - ``Vmin``, ``Vmax`` : coordonnées extrêmes pour la 2nde dimension           |
-|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneDisk                                                       |
-|                                                                                  |
-| **CreateZoneDisk(zone_name, Ucen, Vcen, R, Orient)**                             |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un disque plein                |
-|     - ``Ucen``, ``Vcen`` : coordonnées du centre du disque                       |
-|     - ``R`` : rayon du disque                                                    |
-|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
-+----------------------------------------------------------------------------------+
-| .. module:: CreateZoneDiskWithHole                                               |
-|                                                                                  |
-| **CreateZoneDiskWithHole(zone_name, Ucen, Vcen, R, Rint, Orient)**               |
-|                                                                                  |
-|     - ``zone_name`` : le nom de la zone basée sur un disque troué                |
-|     - ``Ucen``, ``Vcen`` : coordonnées du centre du disque                       |
-|     - ``R`` : rayon externe du disque                                            |
-|     - ``Rint`` : rayon interne du disque                                         |
-|     - ``Orient`` : entier précisant la convention d'orientation du plan          |
-+----------------------------------------------------------------------------------+
-
-
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-|   La convention d'orientation du plan est la même que celle   |
-|   utilisée dans les autres modules de Salome, en particulier  |
-|   GEOM :                                                      |
-|                                                               |
-|     1. plan XY ; U <==> X et V <==> Y                         |
-|     2. plan YZ ; U <==> Y et V <==> Z                         |
-|     3. plan ZX ; U <==> Z et V <==> X                         |
-+---------------------------------------------------------------+
-
-
-.. note::
-  Les fonctions définissant des zones 2D ne doivent être utilisées que si l'intégralité du
-  maillage est 2D, dans un des plans de coordonnées.
-
-
-Méthodes de la classe zone
-""""""""""""""""""""""""""
-
-+---------------------------------------------------------------+
-+---------------------------------------------------------------+
-| .. module:: GetName                                           |
-|                                                               |
-| **GetName()**                                                 |
-|     Retourne le nom de la zone                                |
-+---------------------------------------------------------------+
-| .. module:: GetZoneType                                       |
-|                                                               |
-| **GetZoneType()**                                             |
-|     Retourne le type de la zone                               |
-|                                                               |
-|         * 2 : parallélépipède                                 |
-|         * 3 : sphère                                          |
-|         * 5 : cylindre                                        |
-|         * 7 : tuyau                                           |
-|         * 11, 12, 13 : rectangle et orientation 1, 2 ou 3     |
-|         * 31, 32, 33 : disque et orientation 1, 2 ou 3        |
-|         * 61, 62, 63 : disque percé et orientation 1, 2 ou 3  |
-+---------------------------------------------------------------+
-| .. module:: GetCoords                                         |
-|                                                               |
-| **GetCoords()**                                               |
-|     Retourne un tableau contenant les coordonnées de la zone  |
-|     dans l'ordre d'entrée dans le CreateZoneXXXX associé      |
-+---------------------------------------------------------------+
-
-
-Exemple
-"""""""
-La création d'une boîte 3D ou d'un disque dans le plan XY se fait ainsi : ::
-
-    zone_1 = homard.CreateZoneBox ("BLOC", -1., 1., -30., 40., 10.5, 20.8)
-    zone_2 = homard.CreateZoneDisk ("disque", 1., 3., 43.25, 1)
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_create_zone`
-
-.. warning::
-  En mode graphique, si on édite une zone et que l'on modifie une des dimensions, toutes les itérations qui ont été calculées précédemment avec cette zone sont invalidées. En mode python, cela n'est plus vrai : les itérations restent telles quelles.
-
-
-
diff --git a/doc/tui_homard.rst b/doc/tui_homard.rst
deleted file mode 100644 (file)
index 5727d98..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.. _tui_homard:
-
-Le calcul
-=========
-
-Méthodes de la classe homard
-""""""""""""""""""""""""""""
-
-
-Exemple
-"""""""
-
-
-Saisie graphique correspondante
-"""""""""""""""""""""""""""""""
-Consulter :ref:`gui_homard`
diff --git a/doc/tui_usage.rst b/doc/tui_usage.rst
deleted file mode 100644 (file)
index fec8871..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Mode d'emploi pour TUI
-======================
-Le module HOMARD peut se lancer à partir d'instructions python. On trouvera ici la description de chacune des fonctions accessibles par l'utilisateur.
-
-.. toctree::
-   :maxdepth: 2
-
-   tui_create_case
-   tui_create_iteration
-   tui_create_hypothese
-   tui_create_zone
-   tui_create_boundary
-   tui_homard
diff --git a/doc/tutorials.rst b/doc/tutorials.rst
deleted file mode 100644 (file)
index 3662308..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-Exemples
-========
-.. index:: single: exemple
-.. index:: single: python
-
-On trouvera ici les instructions python pour quelques configurations caractéristiques. Les fichiers de données associés sont téléchargeables. Il faut penser à modifier le contenu de la variable ``dircase`` : c'est le répertoire dans lequel les fichiers med auront été enregistrés. C'est dans ce répertoire que seront écrits les fichiers résultant des adaptations successives.
-
-Raffinement uniforme
-""""""""""""""""""""
-.. index:: single: raffinement;uniforme
-
-On fera ici trois raffinements uniformes successifs du maillage contenu dans le fichier ``tutorial_1.00.med``. Quelques remarques :
-  * la même hypothèse est utilisée à chaque itération
-  * le maillage produit porte toujours le même nom. Cela ne pose pas de problème car il est stocké dans des fichiers différents.
-
- ::
-
-  dircase = "/tmp"
-  #
-  # Hypothesis "Hypo_0"
-  # ===================
-  Hypo_0 = homard.CreateHypothesis('Hypo_0')
-  Hypo_0.SetAdapRefinUnRef(-1, 1, 0)
-  #
-  # Case "Case_1"
-  # =============
-  Case_1 = homard.CreateCase('Case_1', 'MAILL', dircase+'/tutorial_1.00.med')
-  Case_1.SetDirName(dircase)
-  Case_1.SetConfType(1)
-  #
-  # Iterations
-  # ==========
-  # Iteration "Iter_0"
-  Iter_0 = homard.CreateIteration('Iter_0', Case_1.GetIter0Name())
-  Iter_0.SetMeshName('MESH')
-  Iter_0.SetMeshFile(dircase+'/maill.01.med')
-  homard.AssociateIterHypo('Iter_0', 'Hypo_0')
-  codret = Iter_0.Compute(1)
-
-  # Iteration "Iter_1"
-  Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0')
-  Iter_1.SetMeshName('MESH')
-  Iter_1.SetMeshFile(dircase+'/maill.02.med')
-  homard.AssociateIterHypo('Iter_1', 'Hypo_0')
-  codret = Iter_1.Compute(1)
-
-  # Iteration "Iter_2"
-  Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-  Iter_2.SetMeshName('MESH')
-  Iter_2.SetMeshFile(dircase+'/maill.03.med')
-  homard.AssociateIterHypo('Iter_2', 'Hypo_0')
-  codret = Iter_2.Compute(1)
-
-.. note::
-  Téléchargement des fichiers
-
-  * :download:`maillage initial<files/tutorial_1.00.med.gz>`
-  * :download:`commandes python<files/tutorial_1.py>`
-
-
-Raffinement par des zones
-"""""""""""""""""""""""""
-.. index:: single: zone
-
-On procède ici au raffinement selon des zones. Pour passer du maillage initial au maillage 'M_1', on utilise une boîte encadrant le plan z=1 et une sphère centrée sur l'origine de rayon 1.05. Puis pour passer du maillage 'M_1' au maillage 'M_2', on remplace la sphère par une boîte encadrant le cube de côté 0.5, pointant sur l'origine. On notera que le type de raffinement n'a pas été précisé ; par défaut, il sera donc conforme.
-::
-
-  dircase = "/tmp"
-  #
-  # Creation of the zones
-  # =====================
-  # Box "Zone_0"
-  Zone_0 = homard.CreateZoneBox('Zone_0', -0.1, 1.1, -0.1, 1.1, 0.9, 1.1)
-  #
-  # Sphere "Zone_1"
-  Zone_1 = homard.CreateZoneSphere('Zone_1', 0., 0., 0., 1.05)
-  #
-  # Box "Zone_2"
-  Zone_2 = homard.CreateZoneBox('Zone_2', -0.1, 0.51, -0.1, 0.51, -0.1, 0.51)
-  #
-  # Hypothesis "Hypo_0"
-  # ===================
-  Hypo_0 = homard.CreateHypothesis('Hypo_0')
-  Hypo_0.SetAdapRefinUnRef(0, 1, 0)
-  homard.AssociateHypoZone('Zone_1', 'Hypo_0')
-  homard.AssociateHypoZone('Zone_0', 'Hypo_0')
-  #
-  # Hypothesis "Hypo_1"
-  # ===================
-  Hypo_1 = homard.CreateHypothesis('Hypo_1')
-  Hypo_1.SetAdapRefinUnRef(0, 1, 0)
-  homard.AssociateHypoZone('Zone_0', 'Hypo_1')
-  homard.AssociateHypoZone('Zone_2', 'Hypo_1')
-  #
-  # Case "Case_1"
-  # =============
-  Case_1 = homard.CreateCase('Case_1', 'MZERO', dircase+'/tutorial_2.00.med')
-  Case_1.SetDirName(dircase)
-  #
-  # Iteration "Iter_0"
-  # ==================
-  Iter_0 = homard.CreateIteration('Iter_0', Case_1.GetIter0Name())
-  Iter_0.SetMeshName('M_1')
-  Iter_0.SetMeshFile(dircase+'/maill.01.med')
-  homard.AssociateIterHypo('Iter_0', 'Hypo_0')
-  codret = Iter_0.Compute(1)
-  #
-  # Iteration "Iter_1"
-  # ==================
-  Iter_1 = homard.CreateIteration('Iter_1', 'Iter_0')
-  Iter_1.SetMeshName('M_2')
-  Iter_1.SetMeshFile(dircase+'/maill.02.med')
-  homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-  codret = Iter_1.Compute(1)
-
-.. note::
-  Téléchargement des fichiers
-
-  * :download:`maillage initial<files/tutorial_2.00.med.gz>`
-  * :download:`commandes python<files/tutorial_2.py>`
-
-
-Raffinement selon un champ
-""""""""""""""""""""""""""
-.. index:: single: champ
-
-On procède ici au raffinement selon un champ. Les hypothèses servent à définir le nom du champ et les seuils de raffinement/déraffinement. La donnée du fichier et des instants est faite dans l'itération. Des champs sur les noeuds ou sur les mailles sont interpolés.
-Pour adapter le maillage H_1 issu de l'itération Iter_1, deux variantes sont appliquées. Dans la première, Iter_2, le champ est un champ scalaire d'indicateurs d'erreur et on découpe les 1.5% de mailles où l'erreur est la plus grande. Dans la seconde variante, Iter_2_bis, on se base sur un champ vectoriel et on examine le saut de ce vecteur entre une maille et ses voisines : on découpera là où la norme infinie de ce saut est supérieure au seuil absolu de 0.0001.
-::
-
-  dircase = "/tmp"
-  #
-  # Hypothesis "Hypo_0vers1"
-  # ========================
-  Hypo_0vers1 = homard.CreateHypothesis('Hypo_0vers1')
-  Hypo_0vers1.SetAdapRefinUnRef(1, 1, 0)
-  # Characterization of the field
-  Hypo_0vers1.SetField('SOLU_0__QIRE_ELEM_SIGM__________')
-  Hypo_0vers1.SetUseComp(0)
-  Hypo_0vers1.AddComp('ERREST          ')
-  Hypo_0vers1.SetRefinThr(3, 1.0)
-  Hypo_0vers1.SetTypeFieldInterp(2)
-  Hypo_0vers1.AddFieldInterp('SOLU_0__DEPL____________________')
-  Hypo_0vers1.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________')
-  #
-  # Hypothesis "Hypo_1vers2"
-  # ========================
-  Hypo_1vers2 = homard.CreateHypothesis('Hypo_1vers2')
-  Hypo_1vers2.SetAdapRefinUnRef(1, 1, 1)
-  # Characterization of the field
-  Hypo_1vers2.SetField('SOLU_1__QIRE_ELEM_SIGM__________')
-  Hypo_1vers2.SetUseComp(0)
-  Hypo_1vers2.AddComp('ERREST          ')
-  Hypo_1vers2.SetRefinThr(3, 1.5)
-  Hypo_1vers2.SetUnRefThr(3, 6.)
-  Hypo_1vers2.SetTypeFieldInterp(2)
-  Hypo_1vers2.AddFieldInterp('SOLU_1__DEPL____________________')
-  Hypo_1vers2.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________')
-  #
-  # Hypothesis "Hypo_1vers2_bis"
-  # ============================
-  Hypo_1vers2_bis = homard.CreateHypothesis('Hypo_1vers2_bis')
-  Hypo_1vers2_bis.SetAdapRefinUnRef(1, 1, 1)
-  # Characterization of the field
-  Hypo_1vers2_bis.SetField('SOLU_1__DEPL____________________')
-  Hypo_1vers2_bis.SetUseComp(1)
-  Hypo_1vers2_bis.AddComp('DX')
-  Hypo_1vers2_bis.AddComp('DY')
-  Hypo_1vers2_bis.AddComp('DZ')
-  Hypo_1vers2_bis.SetRefinThr(1, 0.0001)
-  Hypo_1vers2_bis.SetUnRefThr(1, 0.000001)
-  Hypo_1vers2_bis.SetTypeFieldInterp(0)
-  #
-  # Case "Case_1"
-  # =============
-  Case_1 = homard.CreateCase('Case_1', 'G_0', dircase+'/tutorial_3.00.med')
-  Case_1.SetDirName(dircase)
-  #
-  # Iteration "Iter_1"
-  # ==================
-  Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name())
-  Iter_1.SetMeshName('H_1')
-  Iter_1.SetMeshFile(dircase+'/maill.01.med')
-  Iter_1.SetFieldFile(dircase+'/tutorial_3.00.med')
-  Iter_1.SetTimeStepRank( 1, 1)
-  homard.AssociateIterHypo('Iter_1', 'Hypo_0vers1')
-  codret = Iter_1.Compute(1)
-  #
-  # Iteration "Iter_2"
-  # ==================
-  Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-  Iter_2.SetMeshName('H_2')
-  Iter_2.SetMeshFile(dircase+'/maill.02.med')
-  Iter_2.SetFieldFile(dircase+'/tutorial_3.01.med')
-  Iter_2.SetTimeStepRank(1, 1)
-  homard.AssociateIterHypo('Iter_2', 'Hypo_1vers2')
-  codret = Iter_2.Compute(1)
-  #
-  # Iteration "Iter_2_bis"
-  # ======================
-  Iter_2_bis = homard.CreateIteration('Iter_2_bis', 'Iter_1')
-  Iter_2_bis.SetMeshName('H_2_bis')
-  Iter_2_bis.SetMeshFile(dircase+'/maill.02.bis.med')
-  Iter_2_bis.SetFieldFile(dircase+'/tutorial_3.01.med')
-  Iter_2_bis.SetTimeStepRank(1, 1)
-  homard.AssociateIterHypo('Iter_2_bis', 'Hypo_1vers2_bis')
-  codret = Iter_2_bis.Compute(1)
-
-.. note::
-  Téléchargement des fichiers
-
-  * :download:`maillage et champ étape 0<files/tutorial_3.00.med.gz>`
-  * :download:`maillage et champ étape 1<files/tutorial_3.01.med.gz>`
-  * :download:`commandes python<files/tutorial_3.py>`
-
-
-Suivi de frontières courbes
-"""""""""""""""""""""""""""
-.. index:: single: champ
-
-On teste ici le suivi des frontières courbes : des frontières analytiques pour décrire les différentes surfaces des tuyaux et une frontière discrète pour décrire les lignes d'intersection des deux tuyaux. Le pilotage du raffinement est le suivant : raffinement uniforme de toutes les mailles contenues dans des groupes désignés.
-::
-
-  dircase = "/tmp"
-  #
-  # Creation of the boundaries
-  # ==========================
-  Boundary_1 = homard.CreateBoundaryDi('intersection', 'PIQUAGE', dircase+'/tutorial_4.fr.med')
-  #
-  Boundary_2 = homard.CreateBoundaryCylinder('cyl_1_ext', 0.0, 25., -25., 25., 50., 75., 100.)
-  #
-  Boundary_3 = homard.CreateBoundaryCylinder('cyl_2_ext', 17.5, -2.5, -12.5, -100., -75., -25., 50.)
-  #
-  Boundary_4 = homard.CreateBoundaryCylinder('cyl_1_int', 0.0, 25., -25., 25., 50., 75., 75.)
-  #
-  Boundary_5 = homard.CreateBoundaryCylinder('cyl_2_int', 17.5, -2.5, -12.5, -100., -75., -25., 25.)
-  #
-  # Hypothesis "Hypo"
-  # ===================
-  # Creation of the hypothesis Hypo_1
-  Hypo_1 = homard.CreateHypothesis('Hypo_1')
-  Hypo_1.SetAdapRefinUnRef(-1, 1, 0)
-  Hypo_1.AddGroup('T1_INT_I')
-  Hypo_1.AddGroup('T1_INT_O')
-  Hypo_1.AddGroup('T2_INT')
-  # Creation of the hypothesis Hypo_2
-  Hypo_2 = homard.CreateHypothesis('Hypo_2')
-  Hypo_2.SetAdapRefinUnRef(-1, 1, 0)
-  Hypo_2.AddGroup('T1_EXT_I')
-  Hypo_2.AddGroup('T1_EXT_O')
-  Hypo_2.AddGroup('T2_EXT')
-  #
-  # Case "Case"
-  # =============
-  Case = homard.CreateCase('Case', 'PIQUAGE', dircase+'/tutorial_4.00.med')
-  Case.SetDirName(dircase)
-  Case.AddBoundaryGroup( 'intersection', '' )
-  Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_I' )
-  Case.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_O' )
-  Case.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' )
-  Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_I' )
-  Case.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_O' )
-  Case.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' )
-  #
-  # Creation of the iterations
-  # ==========================
-  # Creation of the iteration Iter_1
-  Iter_1 = homard.CreateIteration('Iter_1', Case.GetIter0Name() )
-  Iter_1.SetMeshName('PIQUAGE_1')
-  Iter_1.SetMeshFile(dircase+'/maill.01.med')
-  homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-  codret = Iter_1.Compute(1)
-  # Creation of the iteration Iter_2
-  Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1' )
-  Iter_2.SetMeshName('PIQUAGE_2')
-  Iter_2.SetMeshFile(dircase+'/maill.02.med')
-  homard.AssociateIterHypo('Iter_2', 'Hypo_2')
-  codret = Iter_2.Compute(1)
-
-.. note::
-  Téléchargement des fichiers
-
-  * :download:`maillage initial<files/tutorial_4.00.med.gz>`
-  * :download:`maillage de la frontière discrète<files/tutorial_4.fr.med.gz>`
-  * :download:`commandes python<files/tutorial_4.py>`
-
-
-Instructions spécifiques au 2D
-""""""""""""""""""""""""""""""
-.. index:: single: 2D
-
-Les instructions pour adapter un maillage 2D sont exactement identiques à celles nécessaires à l'adaptation d'un maillage 3D. La seule exception concerne le raffinement selon des zones géométriques : des fonctions différentes sont utilisées pour pouvoir définir des zones 2D. On donne alors les coordonnées 2D des zones, en précisant l'orientation du plan du maillage.
-Dans le cas présenté ici, on raffine une première fois toutes les mailles contenues dans un disque percé, puis dans une seconde itération, toutes les mailles contenues dans un rectangle. On notera l'utilisation du suivi des frontières circulaires du domaine.
-::
-
-  dircase = "/tmp"
-  #
-  # Creation of the boundaries
-  # ==========================
-  # Creation of the discrete boundary Boun_1
-  Boun_1 = homard.CreateBoundaryDi('Boun_1', 'MAIL_EXT', dircase+'/tutorial_5.fr.med')
-  #
-  # Creation of the zones
-  # =====================
-  # Creation of the disk with hole enveloppe
-  enveloppe = homard.CreateZoneDiskWithHole( 'enveloppe', 0., 0., 250., 193., 1 )
-  # Creation of the rectangle quart_sup
-  quart_sup = homard.CreateZoneBox2D( 'quart_sup', 0., 250., 0., 250., 1 )
-  #
-  # Hypothesis
-  # ==========
-  # Creation of the hypothesis Hypo_1
-  Hypo_1 = homard.CreateHypothesis('Hypo_1')
-  Hypo_1.SetAdapRefinUnRef(0, 1, 0)
-  homard.AssociateHypoZone('enveloppe', 'Hypo_1')
-  # Creation of the hypothesis Hypo_2
-  Hypo_2 = homard.CreateHypothesis('Hypo_2')
-  Hypo_2.SetAdapRefinUnRef(0, 1, 0)
-  homard.AssociateHypoZone('quart_sup', 'Hypo_2')
-  #
-  # Case "Case_1"
-  # =============
-  Case_1 = homard.CreateCase('Case_1', 'COEUR_2D', dircase+'/tutorial_5.00.med')
-  Case_1.SetDirName(dircase)
-  Case_1.SetConfType(3)
-  Case_1.AddBoundaryGroup('Boun_1', '')
-  #
-  # Iteration "Iter_1"
-  # ==================
-  Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name())
-  Iter_1.SetMeshName('COEUR_2D_01')
-  Iter_1.SetMeshFile(dircase+'/maill.01.med')
-  homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-  codret = Iter_1.Compute(1)
-  #
-  # Iteration "Iter_2"
-  # ==================
-  Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-  Iter_2.SetMeshName('COEUR_2D_02')
-  Iter_2.SetMeshFile(dircase+'/maill.02.med')
-  homard.AssociateIterHypo('Iter_2', 'Hypo_2')
-  codret = Iter_2.Compute(1)
-
-.. note::
-  Téléchargement des fichiers
-
-  * :download:`maillage initial<files/tutorial_5.00.med.gz>`
-  * :download:`maillage de la frontière discrète<files/tutorial_5.fr.med.gz>`
-  * :download:`commandes python<files/tutorial_5.py>`
-
-
-.. toctree::
-   :maxdepth: 2
diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..eae8106
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+INCLUDE(UseOmniORB)  # Provided by KERNEL
+
+INCLUDE_DIRECTORIES(
+  ${OMNIORB_INCLUDE_DIR}
+  ${KERNEL_INCLUDE_DIRS}
+  ${PROJECT_BINARY_DIR}/idl
+)
+
+SET(SalomeIDLHOMARD_IDLSOURCES
+  HOMARD_Gen.idl
+  HOMARD_Cas.idl
+  HOMARD_Hypothesis.idl
+  HOMARD_Iteration.idl
+  HOMARD_Zone.idl
+  HOMARD_Boundary.idl
+  HOMARD_YACS.idl
+)
+
+SET(_idl_include_dirs
+  ${KERNEL_ROOT_DIR}/idl/salome
+)
+
+SET(_idl_link_flags
+  ${KERNEL_SalomeIDLKernel}
+)
+
+OMNIORB_ADD_MODULE(SalomeIDLHOMARD "${SalomeIDLHOMARD_IDLSOURCES}" "${_idl_include_dirs}" "${_idl_link_flags}")
+INSTALL(TARGETS SalomeIDLHOMARD EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
index 4902bdf5d7bfe233e54d4ce26bbee5e90cfc20cc..ad286aa71fbd50834010b2d474dcc8db799a024c 100644 (file)
@@ -8,32 +8,33 @@
         <sequence content="string" name="HOMARD/listeIterations"></sequence>
         <sequence content="string" name="HOMARD/listeCases"></sequence>
         <sequence content="string" name="HOMARD/listeBoundarys"></sequence>
+        <sequence content="string" name="HOMARD/listeYACSs"></sequence>
     </type-list>
     <component-list>
         <component>
             <component-name>HOMARD</component-name>
             <component-username>HOMARD</component-username>
             <component-type>OTHER</component-type>
-            <component-author>HOMARD team - EDF RD</component-author>
-            <component-version>1.1</component-version>
+            <component-author>EDF</component-author>
+            <component-version>1.6</component-version>
             <component-comment>unknown</component-comment>
             <component-multistudy>1</component-multistudy>
             <component-impltype>1</component-impltype>
             <component-icone>HOMARD_2.png</component-icone>
             <constraint></constraint>
             <component-interface-list>
-                <component-interface-name>HOMARD</component-interface-name>
+                <component-interface-name>HOMARD_Gen</component-interface-name>
                 <component-interface-comment>unknown</component-interface-comment>
                 <component-service-list>
                     <component-service>
-                        <service-name>CreateCase</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundaryDi</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
-                                <outParameter-comment>unknown</outParameter-comment>
-                            </outParameter>
-                        </outParameter-list>
-                        <DataStream-list></DataStream-list>
-                    </component-service>
-                    <component-service>
-                        <service-name>CreateHypothesis</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
-                        <service-comment>unknown</service-comment>
-                        <service-by-default>0</service-by-default>
-                        <inParameter-list>
-                            <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                        </inParameter-list>
-                        <outParameter-list>
-                            <outParameter>
-                                <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Hypothesis</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateIteration</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundaryCylinder</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>PreviousIterName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                        </inParameter-list>
-                        <outParameter-list>
-                            <outParameter>
-                                <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Iteration</outParameter-type>
-                                <outParameter-comment>unknown</outParameter-comment>
-                            </outParameter>
-                        </outParameter-list>
-                        <DataStream-list></DataStream-list>
-                    </component-service>
-                    <component-service>
-                        <service-name>CreateZoneBox</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
-                        <service-comment>unknown</service-comment>
-                        <service-by-default>0</service-by-default>
-                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xmini</inParameter-name>
+                                <inParameter-name>Ycentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xmaxi</inParameter-name>
+                                <inParameter-name>Zcentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ymini</inParameter-name>
+                                <inParameter-name>Xaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ymaxi</inParameter-name>
+                                <inParameter-name>Yaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zmini</inParameter-name>
+                                <inParameter-name>Zaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zmaxi</inParameter-name>
+                                <inParameter-name>Radius</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZoneSphere</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundarySphere</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZoneCylinder</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundaryConeR</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-name>Xcentre1</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-name>Ycentre1</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-name>Zcentre1</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-name>Radius1</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-name>Xcentre2</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-name>Ycentre2</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-name>Zcentre2</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Height</inParameter-name>
+                                <inParameter-name>Radius2</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZonePipe</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundaryConeA</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xcentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Ycentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-name>Xaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-name>Yaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-name>Zaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-name>Angle</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-name>Xcentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Height</inParameter-name>
+                                <inParameter-name>Ycentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>InternalRadius</inParameter-name>
+                                <inParameter-name>Zcentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZoneBox2D</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateBoundaryTorus</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Umini</inParameter-name>
+                                <inParameter-name>Xcentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Umaxi</inParameter-name>
+                                <inParameter-name>Ycentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Vmini</inParameter-name>
+                                <inParameter-name>Zcentre</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Vmaxi</inParameter-name>
+                                <inParameter-name>Xaxis</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Orient</inParameter-name>
-                                <inParameter-type>long</inParameter-type>
+                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>RadiusRev</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>RadiusPri</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZoneDisk</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateCase</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ucentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Vcentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
+                                <inParameter-name>MeshName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Orient</inParameter-name>
-                                <inParameter-type>long</inParameter-type>
+                                <inParameter-name>FileName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateZoneDiskWithHole</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateCaseFromIteration</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ucentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Vcentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
+                                <inParameter-name>DirNameStart</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>CreateCaseFromCaseLastIteration</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>InternalRadius</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Orient</inParameter-name>
-                                <inParameter-type>long</inParameter-type>
+                                <inParameter-name>DirNameStart</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateBoundaryDi</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateCaseFromCaseIteration</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>MeshName</inParameter-name>
+                                <inParameter-name>DirNameStart</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>FileName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Number</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateBoundaryCylinder</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateHypothesis</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>HypoName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Hypothesis</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>CreateZoneBox</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>Xcentre</inParameter-name>
-                                <inParameter-type>double</inParameter-type>
+                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-name>Xmini</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-name>Xmaxi</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-name>Ymini</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-name>Ymaxi</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-name>Zmini</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-name>Zmaxi</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateBoundarySphere</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateZoneBox2D</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-name>Umini</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-name>Umaxi</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-name>Vmini</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-name>Vmaxi</inParameter-name>
                                 <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                        </inParameter-list>
+                            <inParameter>
+                                <inParameter-name>Orient</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Boundary</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>AssociateIterHypo</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateZoneCylinder</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Height</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>AssociateHypoZone</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateZoneDisk</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
+                                <inParameter-name>Ucentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Vcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Orient</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>CreateZoneDiskWithHole</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ucentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Vcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>InternalRadius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Orient</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
                         </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCaseName</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateZonePipe</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Height</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>InternalRadius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>string</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCas</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>CreateZoneSphere</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                     </component-service>
                     <component-service>
                         <service-name>GetBoundary</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetZone</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetCase</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Cas</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                     </component-service>
                     <component-service>
                         <service-name>GetHypothesis</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                     </component-service>
                     <component-service>
                         <service-name>GetIteration</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllCases</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetZone</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
-                        <inParameter-list></inParameter-list>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/listeCases</outParameter-type>
+                                <outParameter-type>HOMARD/HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllBoundarys</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetAllBoundarysName</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list></inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllHypotheses</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetAllCasesName</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list></inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/listeHypotheses</outParameter-type>
+                                <outParameter-type>HOMARD/listeCases</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllZones</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetAllHypothesesName</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list></inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD/listeZones</outParameter-type>
+                                <outParameter-type>HOMARD/listeHypotheses</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllIterations</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetAllIterationsName</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list></inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>SetCurrentStudy</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetAllZonesName</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
-                        <inParameter-list>
-                            <inParameter>
-                                <inParameter-name>theStudy</inParameter-name>
-                                <inParameter-type>SALOMEDS/Study</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                        </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <inParameter-list></inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/listeZones</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>AssociateIterIter</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>MeshInfo</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>PreviousIterName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>MeshName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                        </inParameter-list>
-                        <outParameter-list></outParameter-list>
-                        <DataStream-list></DataStream-list>
-                    </component-service>
-                    <component-service>
-                        <service-name>DissociateHypoZone</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
-                        <service-comment>unknown</service-comment>
-                        <service-by-default>0</service-by-default>
-                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>FileName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
+                                <inParameter-name>DirName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                        </inParameter-list>
-                        <outParameter-list></outParameter-list>
-                        <DataStream-list></DataStream-list>
-                    </component-service>
-                    <component-service>
-                        <service-name>InvalideBoundary</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
-                        <service-comment>unknown</service-comment>
-                        <service-by-default>0</service-by-default>
-                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Qual</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Diam</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Conn</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Tail</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Inte</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>InvalideZone</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>LastIteration</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD/HOMARD_Iteration</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>InvalideHypo</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>SetCurrentStudy</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>theStudy</inParameter-name>
+                                <inParameter-type>SALOMEDS/Study</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>InvalideIter</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>PublishFileUnderIteration</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                        </inParameter-list>
-                        <outParameter-list></outParameter-list>
-                        <DataStream-list></DataStream-list>
-                    </component-service>
-                    <component-service>
-                        <service-name>Compute</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
-                        <service-comment>unknown</service-comment>
-                        <service-by-default>0</service-by-default>
-                        <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>FileName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>etatMenage</inParameter-name>
-                                <inParameter-type>long</inParameter-type>
+                                <inParameter-name>Comment</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list>
-                            <outParameter>
-                                <outParameter-name>return</outParameter-name>
-                                <outParameter-type>boolean</outParameter-type>
-                                <outParameter-comment>unknown</outParameter-comment>
-                            </outParameter>
-                        </outParameter-list>
+                        <outParameter-list></outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>VerifieDir</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>PublishBoundaryUnderCase</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list>
-                            <outParameter>
-                                <outParameter-name>return</outParameter-name>
-                                <outParameter-type>boolean</outParameter-type>
-                                <outParameter-comment>unknown</outParameter-comment>
-                            </outParameter>
-                        </outParameter-list>
+                        <outParameter-list></outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>PublishFileUnderIteration</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>PublishResultInSmesh</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>NomIter</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
-                            <inParameter>
-                                <inParameter-name>NomFich</inParameter-name>
+                                <inParameter-name>FileName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>Commentaire</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Option</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>PublishResultInSmesh</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>PublishMeshIterInSmesh</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>NomFich</inParameter-name>
+                                <inParameter-name>IterName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
-                            <inParameter>
-                                <inParameter-name>IconeType</inParameter-name>
-                                <inParameter-type>long</inParameter-type>
-                                <inParameter-comment>unknown</inParameter-comment>
-                            </inParameter>
                         </inParameter-list>
                         <outParameter-list></outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCurrentStudy</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>SetLanguageShort</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
-                        <inParameter-list></inParameter-list>
-                        <outParameter-list>
-                            <outParameter>
-                                <outParameter-name>return</outParameter-name>
-                                <outParameter-type>SALOMEDS/Study</outParameter-type>
-                                <outParameter-comment>unknown</outParameter-comment>
-                            </outParameter>
-                        </outParameter-list>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>LanguageShort</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCurrentStudyID</service-name>
-                        <service-author>HOMARD team - EDF RD</service-author>
-                        <service-version>1.1</service-version>
+                        <service-name>GetLanguageShort</service-name>
+                        <service-author>EDF</service-author>
+                        <service-version>1.6</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list></inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>long</outParameter-type>
+                                <outParameter-type>string</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
index 79131c7b363895448d7ec2e78358b3a31b2feb13..0aa62f72c3cf92f32f9254f41fe16ef30162715d 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_Boundary_IDL
 #define _HOMARD_Boundary_IDL
 
@@ -32,12 +42,17 @@ module HOMARD
 {
   interface HOMARD_Boundary : Engines::EngineComponent
   {
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
+    string   GetName()                                     raises (SALOME::SALOME_Exception);
 
-    void     SetName (in string NomBoundary)               raises (SALOME::SALOME_Exception);
-    string   GetName ()                                    raises (SALOME::SALOME_Exception);
+    long     Delete()                                      raises (SALOME::SALOME_Exception);
+
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
 
-    void     SetBoundaryType (in long BoundaryType)        raises (SALOME::SALOME_Exception);
-    long     GetBoundaryType()                             raises (SALOME::SALOME_Exception);
+// Caracteristiques
+    void     SetType (in long Type)                        raises (SALOME::SALOME_Exception);
+    long     GetType()                                     raises (SALOME::SALOME_Exception);
 
     void     SetMeshFile(in string MeshFile)               raises (SALOME::SALOME_Exception);
     string   GetMeshFile()                                 raises (SALOME::SALOME_Exception);
@@ -52,20 +67,32 @@ module HOMARD
     void     SetSphere (in double Xcentre, in double Ycentre, in double Zcentre, in double rayon)
                                                            raises (SALOME::SALOME_Exception);
 
+    void     SetConeR (in double Xcentre1, in double Ycentre1, in double Zcentre1, in double Rayon1,
+                       in double Xcentre2, in double Ycentre2, in double Zcentre2, in double Rayon2)
+                                                           raises (SALOME::SALOME_Exception);
+
+    void     SetConeA(in double Xaxe,in double Yaxe,in double Zaxe,in double Angle,
+                      in double Xcentre,in double Ycentre,in double ZCentre)
+                                                           raises (SALOME::SALOME_Exception);
+
+    void     SetTorus (in double Xcentre, in double Ycentre, in double Zcentre,
+                          in double Xaxe, in double Yaxe, in double Zaxe, in double rayonRev, in double rayonPri)
+                                                           raises (SALOME::SALOME_Exception);
+
+
     HOMARD::double_array GetCoords()                       raises (SALOME::SALOME_Exception);
 
     void     SetLimit (in double Xincr, in double Yincr, in double Zincr)
                                                            raises (SALOME::SALOME_Exception);
     HOMARD::double_array GetLimit()                        raises (SALOME::SALOME_Exception);
 
-    void     SetCaseCreation(in string NomCas)             raises (SALOME::SALOME_Exception);
-    string   GetCaseCreation()                             raises (SALOME::SALOME_Exception);
-
     void       AddGroup(in string LeGroupe)                raises (SALOME::SALOME_Exception);
-    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
     void       SetGroups(in ListGroupType ListGroup)       raises (SALOME::SALOME_Exception);
+    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
 
-    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+// Liens avec les autres iterations
+    void     SetCaseCreation(in string NomCas)             raises (SALOME::SALOME_Exception);
+    string   GetCaseCreation()                             raises (SALOME::SALOME_Exception);
 
   };
 };
index d79354bc4549009199e6c9ac746f7d086b0e0b1c..73c78b19ec5eaef0a200769637af9d1c58089ca7 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_CAS_IDL
 #define _HOMARD_CAS_IDL
 
@@ -24,6 +34,9 @@
 #include "SALOME_Exception.idl"
 #include "SALOMEDS.idl"
 
+#include "HOMARD_Iteration.idl"
+#include "HOMARD_YACS.idl"
+
 module HOMARD
 {
  typedef sequence<double> extrema ;
@@ -33,36 +46,61 @@ module HOMARD
 
  interface HOMARD_Cas : Engines::EngineComponent
   {
-
-    void     SetName(in string NomCas)                     raises (SALOME::SALOME_Exception);
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
     string   GetName()                                     raises (SALOME::SALOME_Exception);
 
+    long     Delete(in long Option)                        raises (SALOME::SALOME_Exception);
+
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+
+// Caracteristiques
     void     SetDirName(in string NomDir)                  raises (SALOME::SALOME_Exception);
     string   GetDirName()                                  raises (SALOME::SALOME_Exception);
 
+    long     GetState()                                    raises (SALOME::SALOME_Exception);
+
+    long     GetNumberofIter()                             raises (SALOME::SALOME_Exception);
+
     void     SetConfType(in long ConfType)                 raises (SALOME::SALOME_Exception);
     long     GetConfType()                                 raises (SALOME::SALOME_Exception);
 
-    void     AddIteration (in string NomIteration)         raises (SALOME::SALOME_Exception);
-    string   GetIter0Name ()                               raises (SALOME::SALOME_Exception);
+    void     SetExtType(in long ExtType)                   raises (SALOME::SALOME_Exception);
+    long     GetExtType()                                  raises (SALOME::SALOME_Exception);
 
-    extrema  GetBoundingBox()                              raises (SALOME::SALOME_Exception);
     void     SetBoundingBox(in extrema LesExtremes)        raises (SALOME::SALOME_Exception);
+    extrema  GetBoundingBox()                              raises (SALOME::SALOME_Exception);
 
-    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
-    void     SetGroups(in ListGroupType ListGroup)         raises (SALOME::SALOME_Exception);
     void     AddGroup(in string Group)                     raises (SALOME::SALOME_Exception);
+    void     SetGroups(in ListGroupType ListGroup)         raises (SALOME::SALOME_Exception);
+    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
 
-    long     GetNumber()                                   raises (SALOME::SALOME_Exception);
-    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
-
-    ListBoundaryGroupType GetBoundaryGroup()               raises (SALOME::SALOME_Exception);
-    void     AddBoundaryGroup(in string NomBoundary, in string Group)
+    void     AddBoundaryGroup(in string BoundaryName, in string Group)
                                                            raises (SALOME::SALOME_Exception);
+    ListBoundaryGroupType GetBoundaryGroup()               raises (SALOME::SALOME_Exception);
+    void     SupprBoundaryGroup()                          raises (SALOME::SALOME_Exception);
 
     void     SetPyram(in long Pyram)                       raises (SALOME::SALOME_Exception);
     long     GetPyram()                                    raises (SALOME::SALOME_Exception);
 
+    void     MeshInfo(in long Qual, in long Diam, in long Conn, in long Tail, in long Inte)
+                                                           raises (SALOME::SALOME_Exception);
+
+// Liens avec les autres structures
+    string   GetIter0Name ()                               raises (SALOME::SALOME_Exception);
+    HOMARD_Iteration GetIter0 ()                           raises (SALOME::SALOME_Exception);
+
+    HOMARD_Iteration NextIteration(in string IterName)     raises (SALOME::SALOME_Exception);
+
+    HOMARD_Iteration LastIteration()                       raises (SALOME::SALOME_Exception);
+
+    void     AddIteration (in string IterName)             raises (SALOME::SALOME_Exception);
+
+// YACS
+    HOMARD_YACS CreateYACSSchema(in string YACSName, in string ScriptFile, in string DirName, in string MeshFile)
+                                                           raises (SALOME::SALOME_Exception);
+
+
   };
 };
 #endif
index 49f7180fbe7635014d5b56992722b4aadd87965b..8dd3917f065cf808962876d7c7f8801e9c200bcd 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -29,6 +29,7 @@
 #include "HOMARD_Iteration.idl"
 #include "HOMARD_Zone.idl"
 #include "HOMARD_Boundary.idl"
+#include "HOMARD_YACS.idl"
 
 module HOMARD
 {
@@ -37,6 +38,7 @@ module HOMARD
   typedef sequence<string> listeIterations;
   typedef sequence<string> listeCases;
   typedef sequence<string> listeBoundarys;
+  typedef sequence<string> listeYACSs;
 
   interface HOMARD_Gen : Engines::EngineComponent, SALOMEDS::Driver
   {
@@ -44,110 +46,186 @@ module HOMARD
 // A. Les methodes qui suivent sont celles que l'on retrouvera dans
 //    le fichier resources/HOMARDCatalog.xml.in pour definir le composant HOMARD dans YACS
 //    A priori, ce sont les seules sont l'utilisateur doit connaitre l'existence.
+//    ATTENTION : si les noms des arguments changent dans les Createxxxx, il faudra les changer
+//                dans YACSDriver pour assurer la coherence
 //
 // A.1. Les creations
 //
+    HOMARD_Boundary   CreateBoundaryDi (in string BoundaryName, in string MeshName, in string FileName)
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary   CreateBoundaryCylinder (in string BoundaryName,
+                                      in double Xcentre, in double Ycentre, in double Zcentre,
+                                      in double Xaxis, in double Yaxis, in double Zaxis,
+                                      in double Radius)
+    raises (SALOME::SALOME_Exception);
+    HOMARD_Boundary   CreateBoundarySphere (in string BoundaryName,
+                                      in double Xcentre, in double Ycentre, in double Zcentre,
+                                      in double Radius)
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary   CreateBoundaryConeR (in string BoundaryName,
+                                      in double Xcentre1, in double Ycentre1, in double Zcentre1, in double Radius1,
+                                      in double Xcentre2, in double Ycentre2, in double Zcentre2, in double Radius2)
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary   CreateBoundaryConeA (in string BoundaryName,
+                                      in double Xaxis, in double Yaxis, in double Zaxis, in double Angle,
+                                      in double Xcentre, in double Ycentre, in double Zcentre)
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary   CreateBoundaryTorus (in string BoundaryName,
+                                      in double Xcentre, in double Ycentre, in double Zcentre,
+                                      in double Xaxis, in double Yaxis, in double Zaxis,
+                                      in double RadiusRev, in double RadiusPri)
+    raises (SALOME::SALOME_Exception);
     HOMARD_Cas        CreateCase(in string CaseName, in string MeshName, in string FileName )
-                                                           raises (SALOME::SALOME_Exception);
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Cas        CreateCaseFromIteration(in string CaseName, in string DirNameStart )
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Cas        CreateCaseFromCaseLastIteration(in string CaseName, in string DirNameStart )
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Cas        CreateCaseFromCaseIteration(in string CaseName, in string DirNameStart, in long Number )
+    raises(SALOME::SALOME_Exception);
     HOMARD_Hypothesis CreateHypothesis(in string HypoName )
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Iteration  CreateIteration(in string IterName, in string PreviousIterName )
-                                                           raises (SALOME::SALOME_Exception);
+    raises(SALOME::SALOME_Exception);
     HOMARD_Zone       CreateZoneBox (in string ZoneName,
                                      in double Xmini, in double Xmaxi,
                                      in double Ymini, in double Ymaxi,
                                      in double Zmini, in double Zmaxi)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Zone       CreateZoneSphere (in string ZoneName,
-                                        in double Xcentre, in double Ycentre, in double Zcentre,
-                                        in double Radius)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Zone       CreateZoneCylinder (in string ZoneName,
-                                          in double Xcentre, in double Ycentre, in double Zcentre,
-                                          in double Xaxis, in double Yaxis, in double Zaxis,
-                                          in double Radius, in double Height)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Zone       CreateZonePipe (in string ZoneName,
-                                      in double Xcentre, in double Ycentre, in double Zcentre,
-                                      in double Xaxis, in double Yaxis, in double Zaxis,
-                                      in double Radius, in double Height, in double InternalRadius)
-                                                           raises (SALOME::SALOME_Exception);
+    raises(SALOME::SALOME_Exception);
     HOMARD_Zone       CreateZoneBox2D (in string ZoneName,
                                        in double Umini, in double Umaxi,
                                        in double Vmini, in double Vmaxi,
                                        in long Orient)
-                                                           raises (SALOME::SALOME_Exception);
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Zone       CreateZoneCylinder (in string ZoneName,
+                                          in double Xcentre, in double Ycentre, in double Zcentre,
+                                          in double Xaxis, in double Yaxis, in double Zaxis,
+                                          in double Radius, in double Height)
+    raises(SALOME::SALOME_Exception);
     HOMARD_Zone       CreateZoneDisk (in string ZoneName,
                                       in double Ucentre, in double Vcentre,
                                       in double Radius, in long Orient)
-                                                           raises (SALOME::SALOME_Exception);
+    raises(SALOME::SALOME_Exception);
     HOMARD_Zone       CreateZoneDiskWithHole (in string ZoneName,
                                               in double Ucentre, in double Vcentre,
                                               in double Radius, in double InternalRadius,
                                               in long Orient)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Boundary   CreateBoundaryDi (in string BounName, in string MeshName, in string FileName)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Boundary   CreateBoundaryCylinder (in string BounName,
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Zone       CreateZonePipe (in string ZoneName,
                                       in double Xcentre, in double Ycentre, in double Zcentre,
                                       in double Xaxis, in double Yaxis, in double Zaxis,
-                                      in double Radius)
-                                                           raises (SALOME::SALOME_Exception);
-    HOMARD_Boundary   CreateBoundarySphere (in string BounName,
-                                      in double Xcentre, in double Ycentre, in double Zcentre,
-                                      in double Radius)
-                                                           raises (SALOME::SALOME_Exception);
-//
-// A.2. Les associations
-//
-    void AssociateIterHypo(in string IterName, in string HypoName)
-                                                           raises (SALOME::SALOME_Exception);
-    void AssociateHypoZone(in string HypoName, in string ZoneName, in long TypeUse)
-                                                           raises (SALOME::SALOME_Exception);
+                                      in double Radius, in double Height, in double InternalRadius)
+    raises(SALOME::SALOME_Exception);
+    HOMARD_Zone       CreateZoneSphere (in string ZoneName,
+                                        in double Xcentre, in double Ycentre, in double Zcentre,
+                                        in double Radius)
+    raises(SALOME::SALOME_Exception);
 //
-// A.3. Les informations
+// A.2. Les informations
 //
-    string            GetCaseName(in string IterName)      raises (SALOME::SALOME_Exception);
-    HOMARD_Cas        GetCas(in string CaseName)           raises (SALOME::SALOME_Exception);
-    HOMARD_Boundary   GetBoundary(in string BounName)      raises (SALOME::SALOME_Exception);
-    HOMARD_Zone       GetZone(in string ZoneName)          raises (SALOME::SALOME_Exception);
+    HOMARD_Boundary   GetBoundary(in string BoundaryName)  raises (SALOME::SALOME_Exception);
+    HOMARD_Cas        GetCase(in string CaseName)          raises (SALOME::SALOME_Exception);
     HOMARD_Hypothesis GetHypothesis(in string HypoName)    raises (SALOME::SALOME_Exception);
     HOMARD_Iteration  GetIteration(in string IterName)     raises (SALOME::SALOME_Exception);
-    listeCases      GetAllCases()                          raises (SALOME::SALOME_Exception);
-    listeBoundarys  GetAllBoundarys()                      raises (SALOME::SALOME_Exception);
-    listeHypotheses GetAllHypotheses()                     raises (SALOME::SALOME_Exception);
-    listeZones      GetAllZones()                          raises (SALOME::SALOME_Exception);
-    listeIterations GetAllIterations()                     raises (SALOME::SALOME_Exception);
+    HOMARD_YACS       GetYACS(in string YACSName)          raises (SALOME::SALOME_Exception);
+    HOMARD_Zone       GetZone(in string ZoneName)          raises (SALOME::SALOME_Exception);
+
+    listeBoundarys  GetAllBoundarysName()                  raises (SALOME::SALOME_Exception);
+    listeCases      GetAllCasesName()                      raises (SALOME::SALOME_Exception);
+    listeHypotheses GetAllHypothesesName()                 raises (SALOME::SALOME_Exception);
+    listeIterations GetAllIterationsName()                 raises (SALOME::SALOME_Exception);
+    listeYACSs      GetAllYACSsName()                      raises (SALOME::SALOME_Exception);
+    listeZones      GetAllZonesName()                      raises (SALOME::SALOME_Exception);
+
+    void MeshInfo(in string CaseName, in string MeshName, in string FileName,  in string DirName, in long Qual, in long Diam, in long Conn, in long Tail, in long Inte )
+    raises(SALOME::SALOME_Exception);
+
+    HOMARD_Iteration LastIteration(in string CaseName)     raises (SALOME::SALOME_Exception);
 //
-// A.4. L'etude
+// A.3. L'etude
 //
-    void     SetCurrentStudy(in SALOMEDS::Study theStudy)  raises (SALOME::SALOME_Exception);
+    void SetCurrentStudy(in SALOMEDS::Study theStudy)      raises (SALOME::SALOME_Exception);
+    SALOMEDS::Study GetCurrentStudy()                      raises (SALOME::SALOME_Exception);
+    long GetCurrentStudyID()                               raises (SALOME::SALOME_Exception);
+//
+// A.4. Les caracteristiques generales
+//
+    void SetLanguageShort (in string LanguageShort)        raises (SALOME::SALOME_Exception);
+    string GetLanguageShort ()                             raises (SALOME::SALOME_Exception);
 //
 // B. Les methodes qui suivent n'apparaissent pas dans le composant HOMARD dans YACS
 //    L'utilisateur ne devrait pas les connaitre (ni s'en servir, a fortiori)
 //
-    void AssociateIterIter(in string PreviousIterName, in string IterName)
-                                                           raises (SALOME::SALOME_Exception);
-    void DissociateHypoZone(in string ZoneName, in string HypoName)
-                                                           raises (SALOME::SALOME_Exception);
-
-    void InvalideBoundary (in string BounName)             raises (SALOME::SALOME_Exception);
-    void InvalideZone (in string ZoneName)                 raises (SALOME::SALOME_Exception);
+    HOMARD_Iteration CreateIteration(in string IterName, in string PreviousIterName )
+    raises(SALOME::SALOME_Exception);
+//
+    void InvalideBoundary (in string BoundaryName)         raises (SALOME::SALOME_Exception);
     void InvalideHypo (in string HypoName)                 raises (SALOME::SALOME_Exception);
     void InvalideIter (in string IterName)                 raises (SALOME::SALOME_Exception);
+    void InvalideIterOption (in string IterName, in long Option)
+    raises(SALOME::SALOME_Exception);
+    void InvalideYACS (in string YacsName)                 raises (SALOME::SALOME_Exception);
+    void InvalideZone (in string ZoneName)                 raises (SALOME::SALOME_Exception);
 
-    long  Compute (in string IterName, in long etatMenage)
-                                                           raises (SALOME::SALOME_Exception);
+    long DeleteBoundary (in string BoundaryName)           raises (SALOME::SALOME_Exception);
+    long DeleteCase(in string CaseName, in long Option)
+    raises(SALOME::SALOME_Exception);
+    long DeleteHypo(in string HypoName)                    raises (SALOME::SALOME_Exception);
+    long DeleteIteration(in string IterName, in long Option)
+    raises(SALOME::SALOME_Exception);
+    long DeleteIterationOption(in string IterName, in long Option1, in long Option2)
+    raises(SALOME::SALOME_Exception);
+    long DeleteYACS(in string YacsName, in long Option)    raises (SALOME::SALOME_Exception);
+    long DeleteZone (in string ZoneName)                   raises (SALOME::SALOME_Exception);
+//
+    void AssociateIterHypo(in string IterName, in string HypoName)
+    raises(SALOME::SALOME_Exception);
+
+//
+    void AssociateHypoZone(in string HypoName, in string ZoneName, in long TypeUse)
+    raises(SALOME::SALOME_Exception);
+    void DissociateHypoZone(in string HypoName, in string ZoneName)
+    raises(SALOME::SALOME_Exception);
+
+    long Compute (in string IterName, in long CleanOption, in long modeHOMARD, in long Option1, in long Option2)
+    raises(SALOME::SALOME_Exception);
 
-    boolean  VerifieDir (in string IterName)               raises (SALOME::SALOME_Exception);
+//
+    string CreateDirNameIter(in string NomDir, in long option )
+    raises(SALOME::SALOME_Exception);
 
-    void  PublishFileUnderIteration(in string NomIter, in string NomFich, in string Commentaire)
-                                                           raises (SALOME::SALOME_Exception);
-    void  PublishResultInSmesh(in string NomFich, in long IconeType)
-                                                           raises (SALOME::SALOME_Exception);
+    string VerifieDir (in string NomDir)                   raises (SALOME::SALOME_Exception);
 
-    SALOMEDS::Study GetCurrentStudy()                      raises (SALOME::SALOME_Exception);
-    long     GetCurrentStudyID()                           raises (SALOME::SALOME_Exception);
+//
+    void PublishFileUnderIteration(in string IterName, in string FileName, in string Comment)
+    raises(SALOME::SALOME_Exception);
+    void PublishBoundaryUnderCase(in string CaseName, in string BoundaryName)
+    raises(SALOME::SALOME_Exception);
+    void PublishResultInSmesh(in string FileName, in long Option)
+    raises(SALOME::SALOME_Exception);
+    void PublishMeshIterInSmesh (in string IterName)       raises(SALOME::SALOME_Exception);
+
+//
+
+//
+//  La creation des schemas YACS
+    HOMARD_YACS CreateYACSSchema(in string YACSName, in string CaseName, in string ScriptFile, in string DirName, in string MeshFile)
+    raises(SALOME::SALOME_Exception);
+    long YACSWrite (in string YACSName)                    raises (SALOME::SALOME_Exception);
+    long YACSWriteOnFile (in string YACSName, in string YACSFile)
+    raises(SALOME::SALOME_Exception);
+
+//
+//  Les preferences
+    void SetPublisMesh (in long PublisMeshIN, in long PublisMeshOUT)
+    raises (SALOME::SALOME_Exception);
+    long GetPublisMeshIN ()                                raises (SALOME::SALOME_Exception);
+    long GetPublisMeshOUT ()                               raises (SALOME::SALOME_Exception);
+    void SetYACSMaximum(in long YACSMaxIter, in long YACSMaxNode, in long YACSMaxElem)
+    raises (SALOME::SALOME_Exception);
+    long GetYACSMaxIter()                                  raises (SALOME::SALOME_Exception);
+    long GetYACSMaxNode()                                  raises (SALOME::SALOME_Exception);
+    long GetYACSMaxElem()                                  raises (SALOME::SALOME_Exception);
+    void SetYACSConvergenceType(in long TypeTest)          raises (SALOME::SALOME_Exception);
+    long GetYACSConvergenceType()                          raises (SALOME::SALOME_Exception);
   };
 };
 
index 7ff0b81ba13f9be6cbd57c35894a23f7ef4e3218..769f941f5b2162dc156256cbcf6681b23c4ee612 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_HYPOTHESIS_IDL
 #define _HOMARD_HYPOTHESIS_IDL
 
@@ -31,8 +41,8 @@ module HOMARD
   typedef sequence<string> listeZonesHypo ;
   typedef sequence<string> listeIters ;
   typedef sequence<string> listeComposantsHypo ;
-  typedef sequence<long>   listeTypes;
-  typedef sequence<string> listFieldInterpHypo;
+  typedef sequence<long>   listeTypes ;
+  typedef sequence<string> listeFieldInterpsHypo ;
 
   struct InfosHypo
   {
@@ -47,52 +57,38 @@ module HOMARD
 
   interface HOMARD_Hypothesis : Engines::EngineComponent
   {
-
-    void     SetName(in string NomHypothesis)              raises (SALOME::SALOME_Exception);
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
     string   GetName()                                     raises (SALOME::SALOME_Exception);
 
-    void     SetCaseCreation(in string NomCas)             raises (SALOME::SALOME_Exception);
-    string   GetCaseCreation()                             raises (SALOME::SALOME_Exception);
+    long     Delete()                                      raises (SALOME::SALOME_Exception);
 
-    void       SetAdapRefinUnRef(in long Adap, in long Raff, in long Dera)
-                                                           raises (SALOME::SALOME_Exception);
-    listeTypes GetAdapRefinUnRef()                         raises (SALOME::SALOME_Exception);
-    long       GetAdapType()                               raises (SALOME::SALOME_Exception);
-    long       GetRefinType()                              raises (SALOME::SALOME_Exception);
-    long       GetUnRefType()                              raises (SALOME::SALOME_Exception);
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
 
-    void       SetField(in string FieldName)               raises (SALOME::SALOME_Exception);
-    string     GetFieldName()                              raises (SALOME::SALOME_Exception);
-    void       SetRefinThr(in long TypeThR, in double ThreshR)
+// Caracteristiques
+    void     SetUnifRefinUnRef(in long RaffDera)           raises (SALOME::SALOME_Exception);
+    listeTypes GetAdapRefinUnRef()                         raises (SALOME::SALOME_Exception);
+    long     GetAdapType()                                 raises (SALOME::SALOME_Exception);
+    long     GetRefinType()                                raises (SALOME::SALOME_Exception);
+    long     GetUnRefType()                                raises (SALOME::SALOME_Exception);
+
+    void     SetField(in string FieldName)                 raises (SALOME::SALOME_Exception);
+    string   GetFieldName()                                raises (SALOME::SALOME_Exception);
+    void     SetUseField(in long UsField)                  raises (SALOME::SALOME_Exception);
+    InfosHypo GetField()                                   raises (SALOME::SALOME_Exception);
+
+    void     SetUseComp(in long UsCmpI)                    raises (SALOME::SALOME_Exception);
+    void     AddComp(in string NomComp)                    raises (SALOME::SALOME_Exception);
+    void     SupprComp(in string NomComp)                  raises (SALOME::SALOME_Exception);
+    void     SupprComps()                                  raises (SALOME::SALOME_Exception);
+    listeComposantsHypo GetComps()                         raises (SALOME::SALOME_Exception);
+
+    void     SetRefinThr(in long TypeThR, in double ThreshR)
                                                            raises (SALOME::SALOME_Exception);
-    void       SetUnRefThr(in long TypeThC, in double ThreshC)
+    long     GetRefinThrType()                             raises (SALOME::SALOME_Exception);
+    void     SetUnRefThr(in long TypeThC, in double ThreshC)
                                                            raises (SALOME::SALOME_Exception);
-    long       GetRefinThrType()                           raises (SALOME::SALOME_Exception);
-    long       GetUnRefThrType()                           raises (SALOME::SALOME_Exception);
-    void       SetUseComp(in long UsCmpI)                  raises (SALOME::SALOME_Exception);
-    void       SetUseField(in long UsField)                raises (SALOME::SALOME_Exception);
-    InfosHypo  GetField()                                  raises (SALOME::SALOME_Exception);
-
-    void       AddComp(in string NomComposant)             raises (SALOME::SALOME_Exception);
-    void       SupprComp()                                 raises (SALOME::SALOME_Exception);
-    listeComposantsHypo GetListComp()                      raises (SALOME::SALOME_Exception);
-
-    void       AddZone(in string NomZone, in long TypeUse) raises (SALOME::SALOME_Exception);
-    void       SupprZone(in string NomZone)                raises (SALOME::SALOME_Exception);
-    listeZonesHypo GetZones()                              raises (SALOME::SALOME_Exception);
-
-    listeIters GetIterations()                             raises (SALOME::SALOME_Exception);
-    void       AddIteration(in string NomIteration)        raises (SALOME::SALOME_Exception);
-
-    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
-    void       SetGroups(in ListGroupType ListGroup)       raises (SALOME::SALOME_Exception);
-    void       AddGroup(in string LeGroupe)                raises (SALOME::SALOME_Exception);
-
-    void       SetTypeFieldInterp(in long TypeFieldInterp) raises (SALOME::SALOME_Exception);
-    long       GetTypeFieldInterp()                        raises (SALOME::SALOME_Exception);
-    void       AddFieldInterp(in string FieldInterp)       raises (SALOME::SALOME_Exception);
-    void       SupprFieldInterp()                          raises (SALOME::SALOME_Exception);
-    listFieldInterpHypo GetListFieldInterp()               raises (SALOME::SALOME_Exception);
+    long     GetUnRefThrType()                             raises (SALOME::SALOME_Exception);
 
     void     SetNivMax(in long NivMax)                     raises (SALOME::SALOME_Exception);
     long     GetNivMax()                                   raises (SALOME::SALOME_Exception);
@@ -103,7 +99,37 @@ module HOMARD
     void     SetAdapInit(in long AdapInit)                 raises (SALOME::SALOME_Exception);
     long     GetAdapInit()                                 raises (SALOME::SALOME_Exception);
 
-    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+    void     SetExtraOutput(in long ExtraOutput)           raises (SALOME::SALOME_Exception);
+    long     GetExtraOutput()                              raises (SALOME::SALOME_Exception);
+
+    void     AddGroup(in string LeGroupe)                  raises (SALOME::SALOME_Exception);
+    void     SupprGroup(in string LeGroupe)                raises (SALOME::SALOME_Exception);
+    void     SupprGroups()                                 raises (SALOME::SALOME_Exception);
+    void     SetGroups(in ListGroupType ListGroup)         raises (SALOME::SALOME_Exception);
+    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
+
+    void     SetTypeFieldInterp(in long TypeFieldInterp)   raises (SALOME::SALOME_Exception);
+    long     GetTypeFieldInterp()                          raises (SALOME::SALOME_Exception);
+    void     AddFieldInterp(in string FieldInterp)         raises (SALOME::SALOME_Exception);
+    void     AddFieldInterpType(in string FieldInterp, in long TypeInterp)
+                                                           raises (SALOME::SALOME_Exception);
+    void     SupprFieldInterp(in string FieldInterp)       raises (SALOME::SALOME_Exception);
+    void     SupprFieldInterps()                           raises (SALOME::SALOME_Exception);
+    listeFieldInterpsHypo GetFieldInterps()                raises (SALOME::SALOME_Exception);
+
+// Liens avec les autres structures
+    void     SetCaseCreation(in string NomCas)             raises (SALOME::SALOME_Exception);
+    string   GetCaseCreation()                             raises (SALOME::SALOME_Exception);
+
+    void     LinkIteration(in string NomIteration)         raises (SALOME::SALOME_Exception);
+    void     UnLinkIteration(in string NomIteration)       raises (SALOME::SALOME_Exception);
+    listeIters GetIterations()                             raises (SALOME::SALOME_Exception);
+
+    void     AddZone(in string NomZone, in long TypeUse)   raises (SALOME::SALOME_Exception);
+    void     AddZone0(in string NomZone, in long TypeUse)  raises (SALOME::SALOME_Exception);
+    void     SupprZone(in string NomZone)                  raises (SALOME::SALOME_Exception);
+    void     SupprZones()                                  raises (SALOME::SALOME_Exception);
+    listeZonesHypo GetZones()                              raises (SALOME::SALOME_Exception);
 
   };
 };
index 12612c05472a4dc9ac83f5cef1a650bafd4e5409..8575e216ab3a4719f9a90ace8575f7b010613334 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_ITERATION_IDL
 #define _HOMARD_ITERATION_IDL
 
 module HOMARD
 {
   typedef sequence<string> listeIterFilles ;
+  typedef sequence<string> listeFieldInterpsIter ;
+  typedef sequence<string> listeFieldInterpTSRsIter ;
 
   interface HOMARD_Iteration : Engines::EngineComponent
   {
-    void     SetName(in string NomIter)                    raises (SALOME::SALOME_Exception);
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
     string   GetName()                                     raises (SALOME::SALOME_Exception);
 
-    void     SetEtat(in boolean State)                     raises (SALOME::SALOME_Exception);
-    boolean  GetEtat()                                     raises (SALOME::SALOME_Exception);
+    long     Delete(in long Option)                        raises (SALOME::SALOME_Exception);
+
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+
+// Caracteristiques
+    void     SetDirNameLoc(in string NomDir)               raises (SALOME::SALOME_Exception);
+    string   GetDirNameLoc()                               raises (SALOME::SALOME_Exception);
+
+    string   GetDirName()                                  raises (SALOME::SALOME_Exception);
 
     void     SetNumber(in long NumIter)                    raises (SALOME::SALOME_Exception);
     long     GetNumber()                                   raises (SALOME::SALOME_Exception);
 
+    void     SetState(in long State)                       raises (SALOME::SALOME_Exception);
+    long     GetState()                                    raises (SALOME::SALOME_Exception);
+
     void     SetMeshName(in string NomMesh)                raises (SALOME::SALOME_Exception);
     string   GetMeshName()                                 raises (SALOME::SALOME_Exception);
+
     void     SetMeshFile(in string MeshFile)               raises (SALOME::SALOME_Exception);
     string   GetMeshFile()                                 raises (SALOME::SALOME_Exception);
 
     void     SetFieldFile(in string FieldFile)             raises (SALOME::SALOME_Exception);
     string   GetFieldFile()                                raises (SALOME::SALOME_Exception);
+
+// Instants pour le champ de pilotage
+    void     SetTimeStep(in long TimeStep)                 raises (SALOME::SALOME_Exception);
     void     SetTimeStepRank(in long TimeStep, in long Rank)
                                                            raises (SALOME::SALOME_Exception);
+    void     SetTimeStepRankLast()                         raises (SALOME::SALOME_Exception);
     long     GetTimeStep()                                 raises (SALOME::SALOME_Exception);
     long     GetRank()                                     raises (SALOME::SALOME_Exception);
 
-    void     SetIterParent(in string NomIterParent)        raises (SALOME::SALOME_Exception);
-    string   GetIterParent()                               raises (SALOME::SALOME_Exception);
+// Instants pour un champ a interpoler
+    void     SetFieldInterpTimeStep(in string FieldInterp, in long TimeStep)
+                                                           raises (SALOME::SALOME_Exception);
+    void     SetFieldInterpTimeStepRank(in string FieldInterp, in long TimeStep, in long Rank)
+                                                           raises (SALOME::SALOME_Exception);
+    listeFieldInterpTSRsIter GetFieldInterpsTimeStepRank() raises (SALOME::SALOME_Exception);
+    void     SetFieldInterp(in string FieldInterp)         raises (SALOME::SALOME_Exception);
+    listeFieldInterpsIter GetFieldInterps()                raises (SALOME::SALOME_Exception);
+    void     SupprFieldInterps()                           raises (SALOME::SALOME_Exception);
 
-    void     AddIteration(in string NomIter)               raises (SALOME::SALOME_Exception);
+// Fichier des messages
+    void     SetLogFile(in string LogFile)                 raises (SALOME::SALOME_Exception);
+    string   GetLogFile()                                  raises (SALOME::SALOME_Exception);
 
-    void     SetHypoName(in string NomHypo)                raises (SALOME::SALOME_Exception);
-    string   GetHypoName()                                 raises (SALOME::SALOME_Exception);
+    long     Compute(in long etatMenage, in long Option)   raises (SALOME::SALOME_Exception);
 
-    void     SetCaseName(in string NomCas)                 raises (SALOME::SALOME_Exception);
-    string   GetCaseName()                                 raises (SALOME::SALOME_Exception);
+    void     MeshInfo(in long Qual, in long Diam, in long Conn, in long Tail, in long Inte)
+                                                           raises (SALOME::SALOME_Exception);
+    void     MeshInfoOption(in long Qual, in long Diam, in long Conn, in long Tail, in long Inte, in long Option)
+                                                           raises (SALOME::SALOME_Exception);
 
-    void     SetDirName(in string NomDir)                  raises (SALOME::SALOME_Exception);
-    string   GetDirName()                                  raises (SALOME::SALOME_Exception);
+    void     SetFileInfo(in string FileInfo)               raises (SALOME::SALOME_Exception);
+    string   GetFileInfo()                                 raises (SALOME::SALOME_Exception);
+
+// Liens avec les autres iterations
+    HOMARD_Iteration NextIteration(in string NomIter)      raises (SALOME::SALOME_Exception);
 
+    void     LinkNextIteration(in string NomIter)          raises (SALOME::SALOME_Exception);
+    void     UnLinkNextIteration(in string NomIter)        raises (SALOME::SALOME_Exception);
     listeIterFilles GetIterations()                        raises (SALOME::SALOME_Exception);
 
-    void     SetMessFile(in string MessFile)               raises (SALOME::SALOME_Exception);
-    string   GetMessFile()                                 raises (SALOME::SALOME_Exception);
+    void     SetIterParentName(in string NomIterParent)    raises (SALOME::SALOME_Exception);
+    string   GetIterParentName()                           raises (SALOME::SALOME_Exception);
+    HOMARD_Iteration GetIterParent()                       raises (SALOME::SALOME_Exception);
 
-    long     Compute(in long etatMenage)                   raises (SALOME::SALOME_Exception);
+// Liens avec les autres structures
+    void     SetCaseName(in string NomCas)                 raises (SALOME::SALOME_Exception);
+    string   GetCaseName()                                 raises (SALOME::SALOME_Exception);
 
-    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+    void     AssociateHypo(in string NomHypo)              raises (SALOME::SALOME_Exception);
+    void     SetHypoName(in string NomHypo)                raises (SALOME::SALOME_Exception);
+    string   GetHypoName()                                 raises (SALOME::SALOME_Exception);
+
+// Divers
+    void     SetInfoCompute(in long MessInfo)              raises (SALOME::SALOME_Exception);
+    long     GetInfoCompute()                              raises (SALOME::SALOME_Exception);
   };
 };
 #endif
diff --git a/idl/HOMARD_YACS.idl b/idl/HOMARD_YACS.idl
new file mode 100644 (file)
index 0000000..e14af94
--- /dev/null
@@ -0,0 +1,87 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
+#ifndef _HOMARD_YACS_IDL
+#define _HOMARD_YACS_IDL
+
+#include "SALOME_Component.idl"
+#include "SALOME_Exception.idl"
+#include "SALOMEDS.idl"
+
+module HOMARD
+{
+  interface HOMARD_YACS : Engines::EngineComponent
+  {
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
+    string   GetName()                                     raises (SALOME::SALOME_Exception);
+
+    long     Delete(in long Option)                        raises (SALOME::SALOME_Exception);
+
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+
+// Caracteristiques
+    void     SetType (in long Type)                        raises (SALOME::SALOME_Exception);
+    long     GetType()                                     raises (SALOME::SALOME_Exception);
+
+    void     SetMaxIter (in long MaxIter)                  raises (SALOME::SALOME_Exception);
+    long     GetMaxIter()                                  raises (SALOME::SALOME_Exception);
+    void     SetMaxNode (in long MaxNode)                  raises (SALOME::SALOME_Exception);
+    long     GetMaxNode()                                  raises (SALOME::SALOME_Exception);
+    void     SetMaxElem (in long MaxElem)                  raises (SALOME::SALOME_Exception);
+    long     GetMaxElem()                                  raises (SALOME::SALOME_Exception);
+
+    void     SetTestConvergence (in long TypeTest, in double VRef)
+                                                           raises (SALOME::SALOME_Exception);
+    long     GetTestConvergenceType()                      raises (SALOME::SALOME_Exception);
+    double   GetTestConvergenceVRef()                      raises (SALOME::SALOME_Exception);
+
+    void     SetDirName(in string NomDir)                  raises (SALOME::SALOME_Exception);
+    string   GetDirName()                                  raises (SALOME::SALOME_Exception);
+
+    void     SetMeshFile(in string MeshFile)               raises (SALOME::SALOME_Exception);
+    string   GetMeshFile()                                 raises (SALOME::SALOME_Exception);
+
+    void     SetScriptFile(in string ScriptFile)           raises (SALOME::SALOME_Exception);
+    string   GetScriptFile()                               raises (SALOME::SALOME_Exception);
+
+    void     SetXMLFile(in string XMLFile)                 raises (SALOME::SALOME_Exception);
+    string   GetXMLFile()                                  raises (SALOME::SALOME_Exception);
+
+    long     Write()                                       raises (SALOME::SALOME_Exception);
+    long     WriteOnFile( in string YACSFile )             raises (SALOME::SALOME_Exception);
+
+// Liens avec les autres structures
+    void     SetCaseName(in string NomCas)                 raises (SALOME::SALOME_Exception);
+    string   GetCaseName()                                 raises (SALOME::SALOME_Exception);
+
+// Divers
+  };
+};
+#endif
index 1ae7aaec06875d9e29610c55e63df2586e0ace93..261c21553018550365ee94c65c7356a015a9a734 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_Zone_IDL
 #define _HOMARD_Zone_IDL
 
@@ -31,18 +41,21 @@ module HOMARD
 
   interface HOMARD_Zone : Engines::EngineComponent
   {
+// Generalites
+    void     SetName(in string Name)                       raises (SALOME::SALOME_Exception);
+    string   GetName()                                     raises (SALOME::SALOME_Exception);
+
+    long     Delete()                                      raises (SALOME::SALOME_Exception);
 
-    void     SetName (in string NomZone)                   raises (SALOME::SALOME_Exception);
-    string   GetName ()                                    raises (SALOME::SALOME_Exception);
+    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
 
-    void     SetZoneType (in long ZoneType)                raises (SALOME::SALOME_Exception);
-    long     GetZoneType()                                 raises (SALOME::SALOME_Exception);
+// Caracteristiques
+    void     SetType (in long Type)                        raises (SALOME::SALOME_Exception);
+    long     GetType()                                     raises (SALOME::SALOME_Exception);
 
     void     SetBox    (in double Xmini, in double Xmaxi, in double Ymini,
                         in double Ymaxi, in double Zmini, in double Zmaxi)
                                                            raises (SALOME::SALOME_Exception);
-    void     SetSphere (in double Xcentre, in double Ycentre, in double Zcentre, in double rayon)
-                                                           raises (SALOME::SALOME_Exception);
     void     SetCylinder (in double Xcentre, in double Ycentre, in double Zcentre,
                           in double Xaxis, in double Yaxis, in double Zaxis,
                           in double Rayon, in double Haut)
@@ -51,16 +64,19 @@ module HOMARD
                       in double Xaxis, in double Yaxis, in double Zaxis,
                       in double Rayon, in double Haut, in double Rayonint )
                                                            raises (SALOME::SALOME_Exception);
+    void     SetSphere (in double Xcentre, in double Ycentre, in double Zcentre, in double rayon)
+                                                           raises (SALOME::SALOME_Exception);
+
     double_array GetCoords()                               raises (SALOME::SALOME_Exception);
+
     void     SetLimit (in double Xincr, in double Yincr, in double Zincr)
                                                            raises (SALOME::SALOME_Exception);
     double_array GetLimit()                                raises (SALOME::SALOME_Exception);
 
+// Liens avec les autres structures
     void     AddHypo(in string NomHypo)                    raises (SALOME::SALOME_Exception);
-    void     SupprHypo(in string NomHypo)                  raises (SALOME::SALOME_Exception);
     listeHypo GetHypo()                                    raises (SALOME::SALOME_Exception);
-
-    string   GetDumpPython()                               raises (SALOME::SALOME_Exception);
+    void     SupprHypo(in string NomHypo)                  raises (SALOME::SALOME_Exception);
 
   };
 };
diff --git a/idl/Makefile.am b/idl/Makefile.am
deleted file mode 100644 (file)
index f6e520d..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# This Makefile is responsible of generating the client and server
-# implementation of IDL interfaces for both C++ and python usage.
-# The building process of the C++ files is in charge of each source
-# package and then is not manage here.
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-BASEIDL_FILES = HOMARD_Gen.idl HOMARD_Cas.idl HOMARD_Hypothesis.idl HOMARD_Iteration.idl HOMARD_Zone.idl HOMARD_Boundary.idl
-
-BASEIDL_FILES_PY=$(BASEIDL_FILES:%.idl=%_idl.py)
-
-# This variable defines the files to be installed
-dist_salomeidl_DATA = $(BASEIDL_FILES)
-
-# GUI idl common library
-lib_LTLIBRARIES = libSalomeIDLHOMARD.la
-
-# Sources built from idl files
-nodist_libSalomeIDLHOMARD_la_SOURCES = \
-        HOMARD_CasSK.cc \
-        HOMARD_ZoneSK.cc \
-        HOMARD_HypothesisSK.cc \
-        HOMARD_IterationSK.cc \
-        HOMARD_BoundarySK.cc \
-        HOMARD_GenSK.cc
-
-BUILT_SOURCES = $(nodist_libSalomeIDLHOMARD_la_SOURCES)
-
-# header files must be exported: other modules have to use this library
-nodist_salomeinclude_HEADERS = $(BASEIDL_FILES:%.idl=%.hh)
-
-libSalomeIDLHOMARD_la_CPPFLAGS =               \
-       $(KERNEL_CXXFLAGS)                      \
-       -I$(top_builddir)/adm_local/unix        \
-       -I$(top_builddir)/idl                   \
-       $(MED_CXXFLAGS)                         \
-       @CORBA_CXXFLAGS@                        \
-       @CORBA_INCLUDES@
-
-libSalomeIDLHOMARD_la_LDFLAGS = -no-undefined -version-info=0:0:0
-libSalomeIDLHOMARD_la_LIBADD  =                        \
-       $(KERNEL_LDFLAGS) -lSalomeIDLKernel     \
-       @CORBA_LIBS@
-#        $(VISU_LDFLAGS) -lSalomeIDLVisu        
-#        $(MED_LDFLAGS) -lSalomeIDLMed           
-
-# These variables defines the building process of CORBA files
-OMNIORB_IDL         = @OMNIORB_IDL@
-OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@
-OMNIORB_IDLPYFLAGS  = \
-       @OMNIORB_IDLPYFLAGS@ \
-       -I$(top_builddir)/idl/salome \
-       -I$(KERNEL_ROOT_DIR)/idl/salome
-
-IDLCXXFLAGS = \
-       -bcxx \
-       @IDLCXXFLAGS@ \
-       -I$(top_builddir)/idl/salome \
-       -I$(KERNEL_ROOT_DIR)/idl/salome \
-       -I$(MED_ROOT_DIR)/idl/salome \
-       -I$(top_builddir)/adm_local/unix
-IDLPYFLAGS  = \
-       @IDLPYFLAGS@ \
-       -I$(KERNEL_ROOT_DIR)/idl/salome \
-       -I$(MED_ROOT_DIR)/idl/salome
-
-# potential problem on parallel make on the following - multiple outputs
-SUFFIXES = .idl .hh SK.cc
-.idlSK.cc:
-       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-#.idl.hh:
-#      $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-
-install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%)
-       $(INSTALL) -d  $(DESTDIR)$(salomepythondir)
-       ls $^ | while read file; do \
-         $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; \
-       done
-
-# we want to remove only staff generated for IDL files and nothing more
-uninstall-local:
-       @for modulen in HOMARD ; do \
-         test -d $(DESTDIR)$(salomepythondir)/$${modulen} && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen} ; \
-         test -d $(DESTDIR)$(salomepythondir)/$${modulen}__POA && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}__POA" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen}__POA ; \
-       done ; \
-       for filen in $(BASEIDL_FILES_PY) ; do \
-         echo "Removing $(DESTDIR)$(salomepythondir)/$${filen}" && rm -f $(DESTDIR)$(salomepythondir)/$${filen}* ; \
-       done
-
-mostlyclean-local:
-       -rm -f *.hh *.cc .depidl
-
-# we use cpp to generate dependencies between idl files.
-# option x c tells the preprocessor to consider idl as a c file.
-# if an idl is modified, all idl dependencies are rebuilt
-
-.depidl: $(BASEIDL_FILES)
-       @echo "" > $@
-       @for dep in $^ dummy; do \
-         if [ $$dep != "dummy" ]; then \
-           echo Building dependencies for $$dep; \
-           $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome  -I$(MED_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \
-           sed 's/\.o/\SK.cc/' >>$@; \
-         fi; \
-       done ;
-
--include .depidl
diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..d454a9f
--- /dev/null
@@ -0,0 +1,84 @@
+# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SET(HOMARD_RESOURCES_FILES
+  advanced_mesh_info.png
+  boxdxy.png
+  boxdxy_2.png
+  boxdxyz.png
+  boxdxyz_2.png
+  cas_calcule.png
+  cas_non_calcule.png
+  conedxyz.png
+  cone.png
+  conepointvector.png
+  cylinderpointvector.png
+  cylinderpointvector_2.png
+  delete.png
+  drapeau_en.gif
+  drapeau_fr.gif
+  disk.png
+  disk_2.png
+  diskwithhole.png
+  diskwithhole_2.png
+  full_view.png
+  HOMARD.png
+  HOMARD_2.png
+  hypotheses.png
+  iter0.png
+  iter_calculee.png
+  iter_next.png
+  iter_non_calculee.png
+  iter_poursuite.png
+  loop.png
+  med.png
+  mesh_compute.png
+  mesh_hypo_edit.png
+  mesh_tree_mesh.png
+  mesh_tree_importedmesh.png
+  mesh_whatis.png
+  pipe.png
+  pipe_2.png
+  save.png
+  schema.png
+  spherepoint.png
+  spherepoint_2.png
+  table_view.png
+  texte.png
+  texte_2.png
+  toruspointvector.png
+  triangle.png
+  whatis.png
+  write.png
+  yacs.png
+  yacs_01.fr.xml
+  yacs_01.en.xml
+  zone_boxdxyz.png
+  zone_boxdxyz_2.png
+  zone_icone.png
+  zone_icone_2.png
+  zone_spherepoint.png
+  zone_spherepoint_2.png
+  zones.png
+)
+
+INSTALL(FILES ${HOMARD_RESOURCES_FILES} DESTINATION ${SALOME_HOMARD_INSTALL_RES_DATA})
+
+SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SalomeApp.xml.in ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml INSTALL ${SALOME_HOMARD_INSTALL_RES_DATA})
+SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/HOMARDCatalog.xml.in ${CMAKE_CURRENT_BINARY_DIR}/HOMARDCatalog.xml INSTALL ${SALOME_HOMARD_INSTALL_RES_DATA})
index 6aee5c2f817a3d52527324f5cb237855847c2614..304c924add2cd71a9b3eb32cbdc379ee4bb837c3 100644 (file)
@@ -1,12 +1,12 @@
 <?xml version='1.0' encoding='us-ascii' ?>
 
 <!--
-  Copyright (C) 2011-2012  CEA/DEN, EDF RD
+  Copyright (C) 2011-2016  CEA/DEN, EDF RD
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
-  version 2.1 of the License.
+  version 2.1 of the License, or (at your option) any later version.
 
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -52,7 +52,7 @@
             <component-username>HOMARD</component-username>
             <component-type>OTHER</component-type>
             <component-author>HOMARD team - EDF RD</component-author>
-            <component-version>1.0</component-version>
+            <component-version>1.4</component-version>
             <component-comment>unknown</component-comment>
             <component-multistudy>1</component-multistudy>
             <component-impltype>1</component-impltype>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateHypothesis</service-name>
+                        <service-name>CreateCaseFromIteration</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>DirNameStart</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD_Hypothesis</outParameter-type>
+                                <outParameter-type>HOMARD_Cas</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>CreateIteration</service-name>
+                        <service-name>CreateCaseFromCaseLastIteration</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>CaseName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>PreviousIterName</inParameter-name>
+                                <inParameter-name>DirNameStart</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD_Iteration</outParameter-type>
+                                <outParameter-type>HOMARD_Cas</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>CreateCaseFromCaseIteration</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>DirNameStart</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Number</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD_Cas</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>CreateHypothesis</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>HypoName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD_Hypothesis</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>AssociateIterHypo</service-name>
+                        <service-name>CreateBoundaryConeA</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Angle</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD_Boundary</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>AssociateHypoZone</service-name>
+                        <service-name>CreateBoundaryConeR</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
-                                <inParameter-type>string</inParameter-type>
+                                <inParameter-name>Xcentre1</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre1</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre1</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius1</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xcentre2</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre2</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre2</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Radius2</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         </inParameter-list>
-                        <outParameter-list></outParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD_Boundary</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCaseName</service-name>
+                        <service-name>CreateBoundaryTorus</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Ycentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zcentre</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Xaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Yaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Zaxis</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>RadiusRev</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>RadiusPri</inParameter-name>
+                                <inParameter-type>double</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
                         </inParameter-list>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>string</outParameter-type>
+                                <outParameter-type>HOMARD_Boundary</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetCas</service-name>
+                        <service-name>GetCase</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>BounName</inParameter-name>
+                                <inParameter-name>BoundaryName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetZone</service-name>
+                        <service-name>GetHypothesis</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>ZoneName</inParameter-name>
+                                <inParameter-name>HypoName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD_Zone</outParameter-type>
+                                <outParameter-type>HOMARD_Hypothesis</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetHypothesis</service-name>
+                        <service-name>GetIteration</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>HypoName</inParameter-name>
+                                <inParameter-name>IterName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD_Hypothesis</outParameter-type>
+                                <outParameter-type>HOMARD_Iteration</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetIteration</service-name>
+                        <service-name>GetZone</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <service-by-default>0</service-by-default>
                         <inParameter-list>
                             <inParameter>
-                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-name>ZoneName</inParameter-name>
                                 <inParameter-type>string</inParameter-type>
                                 <inParameter-comment>unknown</inParameter-comment>
                             </inParameter>
                         <outParameter-list>
                             <outParameter>
                                 <outParameter-name>return</outParameter-name>
-                                <outParameter-type>HOMARD_Iteration</outParameter-type>
+                                <outParameter-type>HOMARD_Zone</outParameter-type>
                                 <outParameter-comment>unknown</outParameter-comment>
                             </outParameter>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllCases</service-name>
+                        <service-name>GetAllCasesName</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllBoundarys</service-name>
+                        <service-name>GetAllBoundarysName</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllHypotheses</service-name>
+                        <service-name>GetAllHypothesesName</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllZones</service-name>
+                        <service-name>GetAllZonesName</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         <DataStream-list></DataStream-list>
                     </component-service>
                     <component-service>
-                        <service-name>GetAllIterations</service-name>
+                        <service-name>GetAllIterationsName</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <service-version>1.1</service-version>
                         <service-comment>unknown</service-comment>
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
+                    <component-service>
+                        <service-name>LastIteration</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>HOMARD_Iteration</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
                     <component-service>
                         <service-name>SetCurrentStudy</service-name>
                         <service-author>HOMARD team - EDF RD</service-author>
                         <outParameter-list></outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
+                    <component-service>
+                        <service-name>PublishBoundaryUnderCase</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>BoundaryName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>PublishResultInSmesh</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>FileName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Option</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>PublishFileUnderIteration</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>FileName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Comment</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>PublishMeshIterInSmesh</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>IterName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>MeshInfo</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>CaseName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>MeshName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>FileName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>DirName</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Qual</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Diam</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Conn</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Tail</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>Inte</inParameter-name>
+                                <inParameter-type>long</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>SetLanguageShort</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>LanguageShort</inParameter-name>
+                                <inParameter-type>string</inParameter-type>
+                                <inParameter-comment>unknown</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list></outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
+                    <component-service>
+                        <service-name>GetLanguageShort</service-name>
+                        <service-author>HOMARD team - EDF RD</service-author>
+                        <service-version>1.1</service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list></inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>string</outParameter-type>
+                                <outParameter-comment>unknown</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
                 </component-service-list>
             </component-interface-list>
         </component>
diff --git a/resources/HOMARD_en.ps b/resources/HOMARD_en.ps
deleted file mode 100644 (file)
index 4d6e36d..0000000
+++ /dev/null
@@ -1,789 +0,0 @@
-%!PS-Adobe-3.0
-%%Title: PYHELLO_en.xml
-%%For: Nicolas CROUZET - SFME/LGLS
-%%Creator: a2ps version 4.13
-%%CreationDate: Tue Nov  4 17:58:50 2003
-%%BoundingBox: 24 24 588 768
-%%DocumentData: Clean7Bit
-%%Orientation: Landscape
-%%Pages: 1
-%%PageOrder: Ascend
-%%DocumentMedia: Letter 612 792 0 () ()
-%%DocumentNeededResources: font Courier
-%%+ font Courier-Bold
-%%+ font Courier-BoldOblique
-%%+ font Courier-Oblique
-%%+ font Helvetica
-%%+ font Helvetica-Bold
-%%+ font Symbol
-%%+ font Times-Bold
-%%+ font Times-Roman
-%%DocumentProcessColors: Black 
-%%DocumentSuppliedResources: procset a2ps-a2ps-hdr
-%%+ procset a2ps-black+white-Prolog
-%%+ encoding ISO-8859-1Encoding
-%%EndComments
-/a2psdict 200 dict def
-a2psdict begin
-%%BeginProlog
-%%Copyright: (c) 1988, 89, 90, 91, 92, 93 Miguel Santana
-%%Copyright: (c) 1995, 96, 97, 98 Akim Demaille, Miguel Santana
-% Check PostScript language level.
-/languagelevel where {
-  pop /gs_languagelevel languagelevel def
-} {
-  /gs_languagelevel 1 def
-} ifelse
-
-% EPSF import as in the Red Book
-/BeginInclude {
-  /b4_Inc_state save def               % Save state for cleanup
-  /dict_count countdictstack def       % Count objects on dict stack
-  /op_count count 1 sub def            % Count objects on operand stack 
-  userdict begin
-    0 setgray 0 setlinecap
-    1 setlinewidth 0 setlinejoin
-    10 setmiterlimit [ ] 0 setdash newpath
-    gs_languagelevel 1 ne {
-      false setstrokeadjust false setoverprint 
-    } if
-} bind def
-
-/EndInclude {
-  count op_count sub { pos } repeat    % Clean up stacks
-  countdictstack dict_count sub { end } repeat
-  b4_Inc_state restore
-} bind def
-
-/BeginEPSF {
-  BeginInclude
-  /showpage { } def
-} bind def
-
-/EndEPSF {
-  EndInclude
-} bind def
-
-% Page prefeed
-/page_prefeed {         % bool -> -
-  statusdict /prefeed known {
-    statusdict exch /prefeed exch put
-  } {
-    pop
-  } ifelse
-} bind def
-
-/deffont {
-  findfont exch scalefont def
-} bind def
-
-/reencode_font {
-  findfont reencode 2 copy definefont pop def
-} bind def
-
-% Function c-show (str => -)
-% centers text only according to x axis.
-/c-show { 
-  dup stringwidth pop
-  2 div neg 0 rmoveto
-  show
-} bind def
-
-% Function l-show (str => -)
-% prints texts so that it ends at currentpoint
-/l-show {
-  dup stringwidth pop neg 
-  0 
-  rmoveto show
-} bind def
-
-% center-fit show (str w => -)
-% show centered, and scale currentfont so that the width is less than w
-/cfshow {
-  exch dup stringwidth pop
-  % If the title is too big, try to make it smaller
-  3 2 roll 2 copy
-  gt
-  { % if, i.e. too big
-    exch div
-    currentfont exch scalefont setfont
-  } { % ifelse
-    pop pop 
-  }
-  ifelse
-  c-show                       % center title
-} bind def
-
-% Return the y size of the current font
-% - => fontsize
-/currentfontsize {
-  currentfont /FontType get 0 eq {
-    currentfont /FontMatrix get 3 get
-  }{
-    currentfont /FontMatrix get 3 get 1000 mul
-  } ifelse
-} bind def
-
-% reencode the font
-% <encoding-vector> <fontdict> -> <newfontdict>
-/reencode { %def
-  dup length 5 add dict begin
-    { %forall
-      1 index /FID ne 
-      { def }{ pop pop } ifelse
-    } forall
-    /Encoding exch def
-
-    % Use the font's bounding box to determine the ascent, descent,
-    % and overall height; don't forget that these values have to be
-    % transformed using the font's matrix.
-    % We use `load' because sometimes BBox is executable, sometimes not.
-    % Since we need 4 numbers an not an array avoid BBox from being executed
-    /FontBBox load aload pop
-    FontMatrix transform /Ascent exch def pop
-    FontMatrix transform /Descent exch def pop
-    /FontHeight Ascent Descent sub def
-
-    % Define these in case they're not in the FontInfo (also, here
-    % they're easier to get to.
-    /UnderlinePosition 1 def
-    /UnderlineThickness 1 def
-    
-    % Get the underline position and thickness if they're defined.
-    currentdict /FontInfo known {
-      FontInfo
-      
-      dup /UnderlinePosition known {
-       dup /UnderlinePosition get
-       0 exch FontMatrix transform exch pop
-       /UnderlinePosition exch def
-      } if
-      
-      dup /UnderlineThickness known {
-       /UnderlineThickness get
-       0 exch FontMatrix transform exch pop
-       /UnderlineThickness exch def
-      } if
-      
-    } if
-    currentdict 
-  end 
-} bind def
-
-% composite fonts for ASCII-EUC mixed string
-% Version 1.2 1/31/1990
-% Orignal Ken'ichi HANDA (handa@etl.go.jp)
-% Modified Norio Katayama (katayama@rd.nacsis.ac.jp),1998
-% Extend & Fix Koji Nakamaru (maru@on.cs.keio.ac.jp), 1999
-% Anyone can freely copy, modify, distribute this program.
-
-/copyfont {    % font-dic extra-entry-count  copyfont  font-dic
-       1 index maxlength add dict begin
-       {       1 index /FID ne 2 index /UniqueID ne and
-               {def} {pop pop} ifelse
-       } forall
-       currentdict
-       end
-} bind def
-
-/compositefont { % ASCIIFontName EUCFontName RomanScale RomanOffset Rot(T/F) compositefont font
-    /RomanRotation exch def
-    /RomanOffset exch def
-    /RomanScale exch def
-    userdict /fixeucfont_dict known not {
-       userdict begin
-           /fixeucfont_dict 2 dict begin
-               /UpperByteEncoding [
-                   16#00 1 16#20 { pop 0 } for
-                   16#21 1 16#28 { 16#20 sub } for
-                   16#29 1 16#2F { pop 0 } for
-                   16#30 1 16#74 { 16#27 sub } for
-                   16#75 1 16#FF { pop 0 } for
-               ] def
-               /LowerByteEncoding [
-                   16#00 1 16#A0 { pop /.notdef } for
-                   16#A1 1 16#FE { 16#80 sub 16 2 string cvrs
-                                   (cXX) dup 1 4 -1 roll
-                                   putinterval cvn } for
-                   /.notdef
-               ] def
-               currentdict
-           end def
-       end
-    } if
-    findfont dup /FontType get 0 eq {
-       14 dict begin
-           %
-           % 7+8 bit EUC font
-           %
-           12 dict begin
-               /EUCFont exch def
-               /FontInfo (7+8 bit EUC font) readonly def
-               /PaintType 0 def
-               /FontType 0 def
-               /FontMatrix matrix def
-               % /FontName
-               /Encoding fixeucfont_dict /UpperByteEncoding get def
-               /FMapType 2 def
-               EUCFont /WMode known
-               { EUCFont /WMode get /WMode exch def }
-               { /WMode 0 def } ifelse
-               /FDepVector [
-                   EUCFont /FDepVector get 0 get
-                   [ 16#21 1 16#28 {} for 16#30 1 16#74 {} for ]
-                   {
-                       13 dict begin
-                           /EUCFont EUCFont def
-                           /UpperByte exch 16#80 add def       
-                           % /FontName
-                           /FontInfo (EUC lower byte font) readonly def
-                           /PaintType 0 def
-                           /FontType 3 def
-                           /FontMatrix matrix def
-                           /FontBBox {0 0 0 0} def
-                           /Encoding
-                               fixeucfont_dict /LowerByteEncoding get def
-                           % /UniqueID
-                           % /WMode
-                           /BuildChar {
-                               gsave
-                               exch dup /EUCFont get setfont
-                               /UpperByte get
-                               2 string
-                               dup 0 4 -1 roll put
-                               dup 1 4 -1 roll put
-                               dup stringwidth setcharwidth
-                               0 0 moveto show
-                               grestore
-                           } bind def
-                           currentdict
-                       end
-                       /lowerbytefont exch definefont
-                   } forall
-               ] def
-               currentdict
-           end
-           /eucfont exch definefont
-           exch
-           findfont 1 copyfont dup begin
-               RomanRotation {
-                       /FontMatrix FontMatrix
-                       [ 0 RomanScale neg RomanScale 0 RomanOffset neg 0 ]
-                       matrix concatmatrix def
-               }{
-                       /FontMatrix FontMatrix
-                       [ RomanScale 0 0 RomanScale 0 RomanOffset ] matrix concatmatrix
-                       def
-                       /CDevProc
-                           {pop pop pop pop 0 exch -1000 exch 2 div 880} def
-               } ifelse
-           end
-           /asciifont exch definefont
-           exch
-           /FDepVector [ 4 2 roll ] def
-           /FontType 0 def
-           /WMode 0 def
-           /FMapType 4 def
-           /FontMatrix matrix def
-           /Encoding [0 1] def
-           /FontBBox {0 0 0 0} def
-%          /FontHeight 1.0 def % XXXX
-           /FontHeight RomanScale 1.0 ge { RomanScale }{ 1.0 } ifelse def
-           /Descent -0.3 def   % XXXX
-           currentdict
-       end
-       /tmpfont exch definefont
-       pop
-       /tmpfont findfont
-    }{
-       pop findfont 0 copyfont
-    } ifelse
-} def  
-
-/slantfont {   % FontName slant-degree  slantfont  font'
-    exch findfont 1 copyfont begin
-    [ 1 0 4 -1 roll 1 0 0 ] FontMatrix exch matrix concatmatrix
-    /FontMatrix exch def
-    currentdict
-    end
-} def
-
-% Function print line number (<string> # -)
-/# {
-  gsave
-    sx cw mul neg 2 div 0 rmoveto
-    f# setfont
-    c-show
-  grestore
-} bind def
-
-% -------- Some routines to enlight plain b/w printings ---------
-
-% Underline
-% width --
-/dounderline {
-  currentpoint
-  gsave
-    moveto
-    0 currentfont /Descent get currentfontsize mul rmoveto
-    0 rlineto
-    stroke
-  grestore
-} bind def
-
-% Underline a string
-% string --
-/dounderlinestring {
-  stringwidth pop
-  dounderline
-} bind def
-
-/UL {
-  /ul exch store
-} bind def
-
-% Draw a box of WIDTH wrt current font
-% width --
-/dobox {
-  currentpoint
-  gsave
-    newpath
-    moveto
-    0 currentfont /Descent get currentfontsize mul rmoveto
-    dup 0 rlineto
-    0 currentfont /FontHeight get currentfontsize mul rlineto
-    neg 0 rlineto
-    closepath
-    stroke
-  grestore
-} bind def
-
-/BX {
-  /bx exch store
-} bind def
-
-% Box a string
-% string --
-/doboxstring {
-  stringwidth pop
-  dobox
-} bind def
-
-%
-% ------------- Color routines ---------------
-%
-/FG /setrgbcolor load def
-
-% Draw the background
-% width --
-/dobackground {
-  currentpoint
-  gsave
-    newpath
-    moveto
-    0 currentfont /Descent get currentfontsize mul rmoveto
-    dup 0 rlineto
-    0 currentfont /FontHeight get currentfontsize mul rlineto
-    neg 0 rlineto
-    closepath
-    bgcolor aload pop setrgbcolor
-    fill
-  grestore
-} bind def
-
-% Draw bg for a string
-% string --
-/dobackgroundstring {
-  stringwidth pop
-  dobackground
-} bind def
-
-
-/BG {
-  dup /bg exch store
-  { mark 4 1 roll ] /bgcolor exch store } if
-} bind def
-
-
-/Show {
-  bg { dup dobackgroundstring } if
-  ul { dup dounderlinestring } if
-  bx { dup doboxstring } if
-  show
-} bind def
-
-% Function T(ab), jumps to the n-th tabulation in the current line
-/T {
-  cw mul x0 add
-  bg { dup currentpoint pop sub dobackground } if
-  ul { dup currentpoint pop sub dounderline } if
-  bx { dup currentpoint pop sub dobox } if
-  y0 moveto
-} bind def
-
-% Function n: move to the next line
-/n {
-  /y0 y0 bfs sub store
-  x0 y0 moveto
-} bind def
-
-% Function N: show and move to the next line
-/N {
-  Show
-  /y0 y0 bfs sub store
-  x0 y0 moveto
-} bind def
-
-/S {
-  Show
-} bind def
-
-%%BeginResource: procset a2ps-a2ps-hdr 2.0 2
-%%Copyright: (c) 1988, 89, 90, 91, 92, 93 Miguel Santana
-%%Copyright: (c) 1995, 96, 97, 98 Akim Demaille, Miguel Santana
-% Function title: prints page header.
-% <ct> <rt> <lt> are passed as argument
-/title { 
-  % 1. Draw the background
-  x v get y v get moveto
-  gsave
-    0 th 2 div neg rmoveto 
-    th setlinewidth
-    0.95 setgray
-    pw 0 rlineto stroke
-  grestore
-  % 2. Border it
-  gsave
-    0.7 setlinewidth
-    pw 0 rlineto
-    0 th neg rlineto
-    pw neg 0 rlineto
-    closepath stroke
-  grestore
-  % stk: ct rt lt
-  x v get y v get th sub 1 add moveto
-%%IncludeResource: font Helvetica
-  fHelvetica fnfs 0.8 mul scalefont setfont
-  % 3. The left title
-  gsave
-    dup stringwidth pop fnfs 0.8 mul add exch % leave space took on stack
-    fnfs 0.8 mul hm rmoveto
-    show                       % left title
-  grestore
-  exch
-  % stk: ct ltw rt
-  % 4. the right title
-  gsave
-    dup stringwidth pop fnfs 0.8 mul add exch % leave space took on stack
-    dup
-    pw exch stringwidth pop fnfs 0.8 mul add sub
-    hm
-    rmoveto
-    show                       % right title
-  grestore
-  % stk: ct ltw rtw
-  % 5. the center title
-  gsave
-    pw 3 1 roll
-    % stk: ct pw ltw rtw
-    3 copy 
-    % Move to the center of the left room
-    sub add 2 div hm rmoveto
-    % What is the available space in here?
-    add sub fnfs 0.8 mul sub fnfs 0.8 mul sub
-    % stk: ct space_left
-%%IncludeResource: font Helvetica-Bold
-  fHelvetica-Bold fnfs scalefont setfont
-    cfshow
-  grestore
-} bind def
-
-% Function border: prints virtual page border
-/border { %def
-  gsave                                % print four sides
-    0 setgray
-    x v get y v get moveto
-    0.7 setlinewidth           % of the square
-    pw 0 rlineto
-    0 ph neg rlineto
-    pw neg 0 rlineto
-    closepath stroke
-  grestore
-} bind def
-
-% Function water: prints a water mark in background
-/water { %def
-  gsave
-    scx scy moveto rotate
-%%IncludeResource: font Times-Bold
-  fTimes-Bold 100 scalefont setfont
-    .97 setgray
-    dup stringwidth pop 2 div neg -50 rmoveto
-    show
-  grestore
-} bind def
-
-% Function rhead: prints the right header
-/rhead {  %def
-  lx ly moveto
-  fHelvetica fnfs 0.8 mul scalefont setfont
-  l-show
-} bind def
-
-% Function footer (cf rf lf -> -)
-/footer {
-  fHelvetica fnfs 0.8 mul scalefont setfont
-  dx dy moveto
-  show
-
-  snx sny moveto
-  l-show
-  
-  fnx fny moveto
-  c-show
-} bind def
-%%EndResource
-%%BeginResource: procset a2ps-black+white-Prolog 2.0 1
-
-% Function T(ab), jumps to the n-th tabulation in the current line
-/T { 
-  cw mul x0 add y0 moveto
-} bind def
-
-% Function n: move to the next line
-/n { %def
-  /y0 y0 bfs sub store
-  x0 y0 moveto
-} bind def
-
-% Function N: show and move to the next line
-/N {
-  Show
-  /y0 y0 bfs sub store
-  x0 y0 moveto
-}  bind def
-
-/S {
-  Show
-} bind def
-
-/p {
-  false UL
-  false BX
-  fCourier bfs scalefont setfont
-  Show
-} bind def
-
-/sy {
-  false UL
-  false BX
-  fSymbol bfs scalefont setfont
-  Show
-} bind def
-
-/k {
-  false UL
-  false BX
-  fCourier-Oblique bfs scalefont setfont
-  Show
-} bind def
-
-/K {
-  false UL
-  false BX
-  fCourier-Bold bfs scalefont setfont
-  Show
-} bind def
-
-/c {
-  false UL
-  false BX
-  fCourier-Oblique bfs scalefont setfont
-  Show
-} bind def
-
-/C {
-  false UL
-  false BX
-  fCourier-BoldOblique bfs scalefont setfont
-  Show 
-} bind def
-
-/l {
-  false UL
-  false BX
-  fHelvetica bfs scalefont setfont
-  Show
-} bind def
-
-/L {
-  false UL
-  false BX
-  fHelvetica-Bold bfs scalefont setfont
-  Show 
-} bind def
-
-/str{
-  false UL
-  false BX
-  fTimes-Roman bfs scalefont setfont
-  Show
-} bind def
-
-/e{
-  false UL
-  true BX
-  fHelvetica-Bold bfs scalefont setfont
-  Show
-} bind def
-
-%%EndResource
-%%EndProlog
-%%BeginSetup
-%%IncludeResource: font Courier
-%%IncludeResource: font Courier-Oblique
-%%IncludeResource: font Courier-Bold
-%%IncludeResource: font Times-Roman
-%%IncludeResource: font Symbol
-%%IncludeResource: font Courier-BoldOblique
-%%BeginResource: encoding ISO-8859-1Encoding
-/ISO-8859-1Encoding [
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright 
-/parenleft /parenright /asterisk /plus /comma /minus /period /slash 
-/zero /one /two /three /four /five /six /seven 
-/eight /nine /colon /semicolon /less /equal /greater /question 
-/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore 
-/quoteleft /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 /braceleft /bar /braceright /asciitilde /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef 
-/space /exclamdown /cent /sterling /currency /yen /brokenbar /section 
-/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron 
-/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /bullet 
-/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown 
-/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla 
-/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis 
-/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply 
-/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls 
-/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla 
-/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis 
-/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide 
-/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis 
-] def
-%%EndResource
-% Initialize page description variables.
-/sh 612 def
-/sw 792 def
-/llx 24 def
-/urx 768 def
-/ury 588 def
-/lly 24 def
-/#copies 1 def
-/th 20.000000 def
-/fnfs 15 def
-/bfs 8.000000 def
-/cw 4.800000 def
-
-% Dictionary for ISO-8859-1 support
-/iso1dict 8 dict begin
-  /fCourier ISO-8859-1Encoding /Courier reencode_font
-  /fCourier-Bold ISO-8859-1Encoding /Courier-Bold reencode_font
-  /fCourier-BoldOblique ISO-8859-1Encoding /Courier-BoldOblique reencode_font
-  /fCourier-Oblique ISO-8859-1Encoding /Courier-Oblique reencode_font
-  /fHelvetica ISO-8859-1Encoding /Helvetica reencode_font
-  /fHelvetica-Bold ISO-8859-1Encoding /Helvetica-Bold reencode_font
-  /fTimes-Bold ISO-8859-1Encoding /Times-Bold reencode_font
-  /fTimes-Roman ISO-8859-1Encoding /Times-Roman reencode_font
-currentdict end def
-/bgcolor [ 0 0 0 ] def
-/bg false def
-/ul false def
-/bx false def
-% The font for line numbering
-/f# /Helvetica findfont bfs .6 mul scalefont def
-/fSymbol /Symbol findfont def
-/hm fnfs 0.25 mul def
-/pw
-   cw 154.400000 mul
-def
-/ph
-   517.600000 th add
-def
-/pmw 0 def
-/pmh 0 def
-/v 0 def
-/x [
-  0
-] def
-/y [
-  pmh ph add 0 mul ph add
-] def
-/scx sw 2 div def
-/scy sh 2 div def
-/snx urx def
-/sny lly 2 add def
-/dx llx def
-/dy sny def
-/fnx scx def
-/fny dy def
-/lx snx def
-/ly ury fnfs 0.8 mul sub def
-/sx 0 def
-/tab 8 def
-/x0 0 def
-/y0 0 def
-%%EndSetup
-
-%%Page: (1) 1
-%%BeginPageSetup
-/pagesave save def
-sh 0 translate 90 rotate
-%%EndPageSetup
-iso1dict begin
-gsave
-llx lly 12 add translate
-/v 0 store
-/x0 x v get 3.360000 add sx cw mul add store
-/y0 y v get bfs th add sub store
-x0 y0 moveto
-(<?xml version='1.0' encoding='us-ascii'?>) p n
-(<!DOCTYPE application PUBLIC "" "desktop.dtd">) N
-(<application title="PYHELLO component" date="9/12/2001" author="C Caremoli" appId="PYHELLO" >) N
-(<desktop>) N
-(<!-- ### MENUBAR ###  -->) N
-(<menubar>) N
-( <menu-item label-id="PYHELLO" item-id="90" pos-id="3">) N
-(  <popup-item item-id="941" label-id="Lancer IHM" icon-id="" tooltip-id="Lancer IHM PYHELLO" accel-id="" toggle-id="" execute-action=""/>) N
-( </menu-item>) N
-(</menubar>) N
-(<!-- ### TOOLBAR ###  -->) N
-(<toolbar label-id="PYHELLO">) N
-( <toolbutton-item item-id="941" label-id="Lancer IHM" icon-id="ExecPYHELLO.png" tooltip-id="Lancer IHM PYHELLO" accel-id="" toggle-id="" execute-action=") N
-("/>) N
-(</toolbar>) N
-(</desktop>) N
-(</application>) N
-() N
-(PYHELLO_en.xml) (Page 1/1) (Oct 14, 03 10:41) title
-border
-grestore
-(Printed by Nicolas CROUZET - SFME/LGLS) rhead
-(PYHELLO_en.xml) (1/1) (Tuesday November 04, 2003) footer
-end % of iso1dict
-pagesave restore
-showpage
-
-%%Trailer
-end
-%%EOF
diff --git a/resources/HOMARD_en.xml b/resources/HOMARD_en.xml
deleted file mode 100644 (file)
index 573fadb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version='1.0' encoding='us-ascii'?>
-
-<!--
-  Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
-  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
--->
-
-<!DOCTYPE application PUBLIC "" "desktop.dtd">
-<application title="HOMARD component" date="9/12/2001" author="C Caremoli" appId="HOMARD" >
-<desktop>
-<!-- ### MENUBAR ###  -->
-<menubar>
-
-# <menu-item label-id="File" item-id="1" pos-id="">
-#  <submenu label-id="Homard" item-id="19" pos-id="9">
-#   <popup-item item-id="1101" pos-id="" label-id="Information Homard (interactif)" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-#   <popup-item item-id="1102" pos-id="" label-id="Adaptation Homard" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-#   <popup-item item-id="1103" pos-id="Creation d un cas Homard" icon-id="" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-#  </submenu>
-#  <endsubmenu />
-# </menu-item>
-
- <menu-item label-id="HOMARD" item-id="1100" pos-id="3">
-  <popup-item item-id="1104" label-id="Edition d un fichier de commande Homard par Eficas" icon-id="" tooltip-id="Lancer Eficas" accel-id="" toggle-id="" execute-action=""/>
-  <submenu label-id="Avance" item-id="19" pos-id="9">
-  <popup-item item-id="1101" label-id="Information Maillage (interactif)" icon-id="" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-  <popup-item item-id="1102" label-id="Adaptation : gestion d une iteration" icon-id="" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-  <popup-item item-id="1103" label-id="Adaptation : creation du cas " icon-id="" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-  <endsubmenu />
- </menu-item>
-</menubar>
-<!-- ### TOOLBAR ###  -->
-<!-- ///////////////////////////////////// TOOLBARS ////////////////////////////////////// -->
-<toolbar>
-</toolbar>
-<!-- ################################# POPUP MENU #################################  -->
-
-<popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="Cas">
-   <popup-item item-id="1201" pos-id="" label-id="Creation du Cas" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-</popupmenu>
-
-</desktop>
-</application>
-
diff --git a/resources/HOMARD_fr.xml b/resources/HOMARD_fr.xml
deleted file mode 100644 (file)
index 0b93312..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version='1.0' encoding='us-ascii'?>
-
-<!--
-  Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
-  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
--->
-<!DOCTYPE application PUBLIC "" "desktop.dtd">
-<application title="HOMARD component" date="9/12/2001" author="C Caremoli" appId="HOMARD" >
-<desktop>
-<!-- ### MENUBAR ###  -->
-<menubar>
-
- <menu-item label-id="File" item-id="1" pos-id="">
-  <submenu label-id="Homard" item-id="19" pos-id="9">
-   <popup-item item-id="1101" pos-id="" label-id="Dialogue Homard" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
-  </submenu>
-  <endsubmenu />
- </menu-item>
-
- <menu-item label-id="HOMARD" item-id="1100" pos-id="3">
-  <popup-item item-id="1101" label-id="Dialogue Homard" icon-id="" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-
- </menu-item>
-</menubar>
-<!-- ### TOOLBAR ###  -->
-<toolbar label-id="HOMARD">
- <toolbutton-item item-id="1101" label-id="Dialogue Homard" icon-id="ExecHOMARD.png" tooltip-id="Lancer HOMARD" accel-id="" toggle-id="" execute-action=""/>
-</toolbar>
-</desktop>
-</application>
-
diff --git a/resources/Makefile.am b/resources/Makefile.am
deleted file mode 100644 (file)
index d2a6021..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-
-dist_salomeres_DATA =   \
-       $(top_builddir)/resources/SalomeApp.xml \
-       boxdxy.png \
-       boxdxy_2.png \
-       boxdxyz.png \
-       boxdxyz_2.png \
-       cas_calcule.png \
-       cas_non_calcule.png \
-       cylinderpointvector.png \
-       cylinderpointvector_2.png \
-       delete.png \
-       disk.png \
-       disk_2.png \
-       diskwithhole.png \
-       diskwithhole_2.png \
-       HOMARD.png \
-       HOMARD_2.png \
-       hypotheses.png \
-       iter0.png \
-       iter_calculee.png \
-       iter_calulee.png \
-       iter_next.png \
-       iter_non_calculee.png \
-       iter_non_calulee.png \
-       med.png \
-       mesh_compute.png \
-       mesh_hypo_edit.png \
-       mesh_tree_mesh.png \
-       mesh_tree_importedmesh.png \
-       mesh_whatis.png \
-       pipe.png \
-       pipe_2.png \
-       spherepoint.png \
-       spherepoint_2.png \
-       texte.png \
-       texte_2.png \
-       triangle.png \
-       whatis.png \
-       zone_boxdxyz.png \
-       zone_boxdxyz_2.png \
-       zone_icone.png \
-       zone_icone_2.png \
-       zone_spherepoint.png \
-       zone_spherepoint_2.png \
-       zones.png
-
-# VSR: little trick to avoid putting if HOMARDCatalog.xml to the distribution archive
-nodist_salomeres_SCRIPTS = HOMARDCatalog.xml
index 81767390efb52929adba333d82fc9cf7bc1f80d1..2f411446ca79f3b49baf1d404e11f66fe5715b36 100644 (file)
@@ -1,10 +1,10 @@
 <!--
-  Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+  Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
-  version 2.1 of the License.
+  version 2.1 of the License, or (at your option) any later version.
 
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
 -->
+
 <document>
   <section name="HOMARD">
     <!-- Major module parameters -->
     <parameter name="name"          value="Homard"/>
     <parameter name="icon"          value="HOMARD.png"/>
-    <parameter name="version"       value="@VERSION@"/>
+    <parameter name="version"       value="@SALOMEHOMARD_VERSION@"/>
     <parameter name="documentation" value="homard_help"/>
+    <!-- Other module preferences -->
+<!--     <parameter name="use_precision"                value="false" /> -->
+    <!-- Input field precisions -->
+<!--     <parameter name="def_precision"                value="3"  /> -->
   </section>
   <section name="homard_help" >
-    <parameter name="sub_menu"          value="%1 module"/>
-    <parameter name="User's Guide"      value="%HOMARD_ROOT_DIR%/share/doc/salome/gui/HOMARD/index.html"/>
+    <parameter name="sub_menu"      value="%1 module"/>
+    <parameter name="Mode d'emploi" value="%HOMARD_ROOT_DIR%/share/doc/salome/gui/HOMARD/fr/index.html"/>
+<!--     <parameter name="Mode d'emploi" value="%HOMARD_ROOT_DIR%/share/doc/salome/gui/HOMARD/fr/index.html" icon="drapeau_fr.gif"/> -->
+    <parameter name="User's Guide"  value="%HOMARD_ROOT_DIR%/share/doc/salome/gui/HOMARD/en/index.html"/>
+<!--     <parameter name="User's Guide"  value="%HOMARD_ROOT_DIR%/share/doc/salome/gui/HOMARD/en/index.html" icon="drapeau_en.gif"/> -->
   </section>
   <section name="resources">
     <!-- Module resources -->
     <parameter name="HOMARD" value="%HOMARD_ROOT_DIR%/share/salome/resources/homard"/>
   </section>
+  <section name="windows_geometry">
+    <parameter name="HOMARD" value="#00 #00 #00 #FF #00 #00 #00 #00 #FD #00 #00 #00 #02 #00 #00 #00 #00 #00 #00 #01 #00 #00 #00 #02 #8D #FC #02 #00 #00 #00 #01 #FB #00 #00 #00 #22 #00 #6F #00 #62 #00 #6A #00 #65 #00 #63 #00 #74 #00 #42 #00 #72 #00 #6F #00 #77 #00 #73 #00 #65 #00 #72 #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #37 #00 #00 #02 #8D #00 #00 #00 #53 #00 #FF #FF #FF #00 #00 #00 #03 #00 #00 #05 #40 #00 #00 #00 #53 #FC #01 #00 #00 #00 #01 #FB #00 #00 #00 #22 #00 #70 #00 #79 #00 #74 #00 #68 #00 #6F #00 #6E #00 #43 #00 #6F #00 #6E #00 #73 #00 #6F #00 #6C #00 #65 #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #00 #00 #00 #05 #40 #00 #00 #00 #46 #00 #FF #FF #FF #00 #00 #04 #38 #00 #00 #02 #8D #00 #00 #00 #04 #00 #00 #00 #04 #00 #00 #00 #08 #00 #00 #00 #08 #FC #00 #00 #00 #01 #00 #00 #00 #02 #00 #00 #00 #02 #00 #00 #00 #1C #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #00 #00 #00 #00 #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #1A #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #CE #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00"/>
+  </section>
+  <section name="windows_visibility">
+    <parameter name="HOMARD" value="#00 #00 #00 #00 #04 #00 #00 #00 #0E #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #1A #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #1C #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #00 #00 #00 #10 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #01 #00 #00 #00 #02 #00 #00 #00 #22 #00 #6F #00 #62 #00 #6A #00 #65 #00 #63 #00 #74 #00 #42 #00 #72 #00 #6F #00 #77 #00 #73 #00 #65 #00 #72 #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #22 #00 #70 #00 #79 #00 #74 #00 #68 #00 #6F #00 #6E #00 #43 #00 #6F #00 #6E #00 #73 #00 #6F #00 #6C #00 #65 #00 #44 #00 #6F #00 #63 #00 #6B #01"/>
+  </section>
 </document>
diff --git a/resources/advanced_mesh_info.png b/resources/advanced_mesh_info.png
new file mode 100644 (file)
index 0000000..6e5b317
Binary files /dev/null and b/resources/advanced_mesh_info.png differ
diff --git a/resources/cone.png b/resources/cone.png
new file mode 100644 (file)
index 0000000..677e2c7
Binary files /dev/null and b/resources/cone.png differ
diff --git a/resources/conedxyz.png b/resources/conedxyz.png
new file mode 100644 (file)
index 0000000..2d46834
Binary files /dev/null and b/resources/conedxyz.png differ
diff --git a/resources/conepointvector.png b/resources/conepointvector.png
new file mode 100644 (file)
index 0000000..4df7851
Binary files /dev/null and b/resources/conepointvector.png differ
diff --git a/resources/drapeau_en.gif b/resources/drapeau_en.gif
new file mode 100644 (file)
index 0000000..7d714b6
Binary files /dev/null and b/resources/drapeau_en.gif differ
diff --git a/resources/drapeau_fr.gif b/resources/drapeau_fr.gif
new file mode 100644 (file)
index 0000000..c09ccc2
Binary files /dev/null and b/resources/drapeau_fr.gif differ
diff --git a/resources/full_view.png b/resources/full_view.png
new file mode 100644 (file)
index 0000000..cccbbf1
Binary files /dev/null and b/resources/full_view.png differ
diff --git a/resources/iter_calulee.png b/resources/iter_calulee.png
deleted file mode 100644 (file)
index de69b87..0000000
Binary files a/resources/iter_calulee.png and /dev/null differ
diff --git a/resources/iter_non_calulee.png b/resources/iter_non_calulee.png
deleted file mode 100644 (file)
index 228f10c..0000000
Binary files a/resources/iter_non_calulee.png and /dev/null differ
diff --git a/resources/iter_poursuite.png b/resources/iter_poursuite.png
new file mode 100644 (file)
index 0000000..10ee5f7
Binary files /dev/null and b/resources/iter_poursuite.png differ
diff --git a/resources/loop.png b/resources/loop.png
new file mode 100644 (file)
index 0000000..87e001d
Binary files /dev/null and b/resources/loop.png differ
diff --git a/resources/save.png b/resources/save.png
new file mode 100644 (file)
index 0000000..3bc2a37
Binary files /dev/null and b/resources/save.png differ
diff --git a/resources/schema.png b/resources/schema.png
new file mode 100644 (file)
index 0000000..513ed02
Binary files /dev/null and b/resources/schema.png differ
diff --git a/resources/table_view.png b/resources/table_view.png
new file mode 100644 (file)
index 0000000..f459751
Binary files /dev/null and b/resources/table_view.png differ
diff --git a/resources/toruspointvector.png b/resources/toruspointvector.png
new file mode 100644 (file)
index 0000000..138b520
Binary files /dev/null and b/resources/toruspointvector.png differ
diff --git a/resources/write.png b/resources/write.png
new file mode 100644 (file)
index 0000000..7988feb
Binary files /dev/null and b/resources/write.png differ
diff --git a/resources/yacs.png b/resources/yacs.png
new file mode 100644 (file)
index 0000000..39c00aa
Binary files /dev/null and b/resources/yacs.png differ
diff --git a/resources/yacs_01.en.xml b/resources/yacs_01.en.xml
new file mode 100644 (file)
index 0000000..0f21bf7
--- /dev/null
@@ -0,0 +1,485 @@
+<?xml version='1.0' encoding='iso-8859-1' ?>
+<proc name="HOMARD">
+   <property name="DefaultStudyID" value="1"/>
+   <objref name="CALCIUM_real" id="IDL:Ports/Calcium_Ports/Calcium_Real_Port:1.0"/>
+   <type name="string" kind="string"/>
+   <struct name="Engines/dataref">
+      <member name="ref" type="string"/>
+   </struct>
+   <objref name="HOMARD_Boundary" id="IDL:HOMARD/HOMARD_Boundary:1.0"/>
+   <objref name="HOMARD_Cas" id="IDL:HOMARD/HOMARD_Cas:1.0"/>
+   <objref name="HOMARD_Hypothesis" id="IDL:HOMARD/HOMARD_Hypothesis:1.0"/>
+   <objref name="HOMARD_Iteration" id="IDL:HOMARD/HOMARD_Iteration:1.0"/>
+   <objref name="HOMARD_Zone" id="IDL:HOMARD/HOMARD_Zone:1.0"/>
+   <objref name="Study" id="IDL:SALOMEDS/Study:1.0"/>
+   <type name="bool" kind="bool"/>
+   <sequence name="boolvec" content="bool"/>
+   <type name="double" kind="double"/>
+   <sequence name="dblevec" content="double"/>
+   <objref name="file" id="file"/>
+   <type name="int" kind="int"/>
+   <sequence name="intvec" content="int"/>
+   <struct name="stringpair">
+      <member name="name" type="string"/>
+      <member name="value" type="string"/>
+   </struct>
+   <sequence name="propvec" content="stringpair"/>
+   <objref name="pyobj" id="python:obj:1.0"/>
+   <sequence name="seqboolvec" content="boolvec"/>
+   <sequence name="seqdblevec" content="dblevec"/>
+   <sequence name="seqint" content="int"/>
+   <sequence name="seqintvec" content="intvec"/>
+   <sequence name="stringvec" content="string"/>
+   <sequence name="seqstringvec" content="stringvec"/>
+   <container name="DefaultContainer">
+      <property name="container_name" value="FactoryServer"/>
+      <property name="name" value="localhost"/>
+   </container>
+   <datanode name="DataInit">
+      <parameter name="MeshFile" type="string">
+DataInit_MeshFile
+      </parameter>
+   </datanode>
+   <bloc name="Etude_Initialisation">
+      <inline name="StudyCreation">
+         <script><code><![CDATA[
+import orbmodule
+import SALOMEDS_idl
+
+import HOMARD
+import HOMARD_Gen_idl
+import HOMARD_Cas_idl
+import HOMARD_Iteration_idl
+import HOMARD_Hypothesis_idl
+import HOMARD_Zone_idl
+import HOMARD_Boundary_idl
+
+import salome
+salome.salome_init()
+CurrentStudy = salome.myStudy
+]]></code></script>
+         <outport name="CurrentStudy" type="Study"/>
+      </inline>
+      <service name="SetCurrentStudy">
+         <component>HOMARD</component>
+         <load container="DefaultContainer"/>
+         <method>SetCurrentStudy</method>
+         <inport name="theStudy" type="Study"/>
+      </service>
+      <control> <fromnode>StudyCreation</fromnode> <tonode>SetCurrentStudy</tonode> </control>
+      <datalink control="false">
+         <fromnode>StudyCreation</fromnode> <fromport>CurrentStudy</fromport>
+         <tonode>SetCurrentStudy</tonode> <toport>theStudy</toport>
+      </datalink>
+   </bloc>
+   <while name="Boucle_de_convergence">
+      <bloc name="Alternance_Calcul_HOMARD">
+         <inline name="Calcul">
+            <script><code><![CDATA[
+import sys
+import os
+#
+Alternance_Calcul_HOMARD_Calcul
+#
+argu  = ["-v"]
+argu.append("--rep_calc=" + rep_calc)
+argu.append("--num=%d" % numCalc)
+argu.append("--mesh_file="  + MeshFile)
+#
+Script_A = Script(argu)
+#
+Error, message_erreur, dico_resu = Script_A.compute ()
+#
+dico_resu["rep_calc"] = rep_calc
+#
+]]></code></script>
+            <inport name="numCalc" type="int"/>
+            <inport name="MeshFile" type="string"/>
+            <outport name="Error" type="int"/>
+            <outport name="dico_resu" type="pyobj"/>
+         </inline>
+         <inline name="Analyse">
+            <script><code><![CDATA[
+global NumCalc
+global resu1
+# Default values
+NumCalcP1 = NumCalc + 1
+FileName = " "
+#
+Analyse_Test_Convergence
+#
+MessInfo = None
+Error = 0
+while not Error :
+#
+# If the computation failed, stop:
+#
+    if ErrCalc :
+        MessInfo = "Computation error # %d" % ErrCalc
+        Error = abs(ErrCalc)
+        break
+#
+# If the file is not defined, stop:
+#
+    if dico_resu.has_key("FileName") :
+        FileName = dico_resu["FileName"]
+    else :
+        MessInfo = "The file for the mesh is not defined."
+        Error = -2
+        break
+#
+# If the criterion is satisfied, stop:
+#
+    if dico_resu.has_key("V_TEST") :
+        valeur_v = dico_resu["V_TEST"]
+        if NumCalc == 0 :
+            resu1 = [valeur_v]
+        else :
+            resu1.append(valeur_v)
+        if NumCalc > 2 :
+            solu_m1 = resu1[-2]
+            rap = ( resu1[-1] - solu_m1 ) / solu_m1
+            if abs(rap) < 0.001 :
+                MessInfo = ""
+                Error = -9999
+                break
+    else :
+        MessInfo = "The value for the test is not available."
+        Error = -3
+        break
+#
+# If the maximum number of adaptations is reached, stop:
+#
+    if MaxIter > 0 :
+      if NumCalc >= MaxIter :
+          MessInfo = "The maximum number of adaptations is reached: %d" % (MaxIter+1)
+          Error = -1
+          break
+#
+    break
+]]></code></script>
+            <inport name="NumCalc" type="int"/>
+            <inport name="ErrCalc" type="int"/>
+            <inport name="dico_resu" type="pyobj"/>
+            <outport name="Error" type="int"/>
+            <outport name="NumCalcP1" type="int"/>
+            <outport name="FileName" type="string"/>
+            <outport name="MessInfo" type="string"/>
+         </inline>
+         <switch name="Adaptation" select="0">
+            <default>
+               <bloc name="Arret_boucle">
+                  <inline name="Arret">
+                     <script><code><![CDATA[
+OK = 0
+MeshFile = " "
+]]></code></script>
+                     <inport name="MessInfo" type="string"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MeshFile" type="string"/>
+                     <outport name="MessInfo" type="string"/>
+                  </inline>
+               </bloc>
+            </default>
+            <case id="0">
+               <bloc name="Adaptation_HOMARD">
+                  <switch name="HOMARD_Initialisation" select="0">
+                     <default>
+                        <bloc name="Iter_n">
+                           <service name="LastIteration">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>LastIteration</method>
+                              <inport name="CaseName" type="string"/>
+                              <outport name="return" type="HOMARD_Iteration"/>
+                           </service>
+                           <service name="GetHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>GetHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>LastIteration</fromnode> <tonode>GetHypothesis</tonode> </control>
+                        </bloc>
+                     </default>
+                     <case id="1">
+                        <bloc name="Iter_1">
+                           <service name="CreateCase">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateCase</method>
+                              <inport name="CaseName" type="string"/>
+                              <inport name="MeshName" type="string"/>
+                              <inport name="FileName" type="string"/>
+                              <outport name="return" type="HOMARD_Cas"/>
+                           </service>
+                           <inline name="Case_Options">
+                              <script><code><![CDATA[
+import os
+# Directory for the adaptation
+Iter_1_Case_Options
+# Associated iteration #0
+Iter0 = Case.GetIter0()
+]]></code></script>
+                              <inport name="Case" type="HOMARD_Cas"/>
+                              <outport name="Iter0" type="HOMARD_Iteration"/>
+                           </inline>
+                           <service name="CreateHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+Iter_1
+                           <datalink control="false">
+                              <fromnode>CreateCase</fromnode> <fromport>return</fromport>
+                              <tonode>Case_Options</tonode> <toport>Case</toport>
+                           </datalink>
+                        </bloc>
+                     </case>
+                  </switch>
+                  <inline name="HOMARD_Exec">
+                     <script><code><![CDATA[
+import os
+# Directory for the computation
+HOMARD_Exec_DirName
+HOMARD_Exec_MeshName
+#
+# Hypothesis
+# ==========
+# . Name of the hypothesis
+# ------------------------
+HypoName = Hypo.GetName()
+#
+# . Options
+# ---------
+HOMARD_Exec_Hypo_Options
+#
+# Name of the next iteration
+# ==========================
+# . Name of the previous iteration
+LastIterName = LastIter.GetName()
+aux = '%03d' % NumAdapt
+# . At iteration #1, addition
+if  NumAdapt == 1 :
+  IterName = LastIterName + "_" + aux
+# . Then, substitution
+else :
+  IterName = LastIterName[:-3] + aux
+#
+# Creation of the iteration
+# =========================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options of the iteration
+# ========================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . The name of the next mesh
+Iter.SetMeshName(MeshName)
+#
+# . The file of the next mesh
+aux = '%02d' % NumAdapt
+MeshFile = os.path.join (DirName, "maill."+aux+".med")
+Iter.SetMeshFile(MeshFile)
+#
+# . The file for the fields
+FileName = dico_resu["FileName"]
+Iter.SetFieldFile(FileName)
+#
+HOMARD_Exec_Iter_Options
+#
+# Calculation
+# ===========
+Error = Iter.Compute(1,1)
+#
+# The loops stops if problem
+# ==========================
+if Error :
+    OK = 0
+    MessInfo = "Error in HOMARD in the adaptation # %d" % NumAdapt
+else :
+    OK = 1
+    MessInfo = " "
+]]></code></script>
+                     <inport name="NumAdapt" type="int"/>
+                     <inport name="LastIter" type="HOMARD_Iteration"/>
+                     <inport name="Hypo" type="HOMARD_Hypothesis"/>
+                     <inport name="dico_resu" type="pyobj"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MessInfo" type="string"/>
+                     <outport name="MeshFile" type="string"/>
+                  </inline>
+                  <control> <fromnode>HOMARD_Initialisation</fromnode> <tonode>HOMARD_Exec</tonode> </control>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.LastIteration</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.Case_Options</fromnode> <fromport>Iter0</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.GetHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+               </bloc>
+            </case>
+         </switch>
+         <control> <fromnode>Calcul</fromnode> <tonode>Analyse</tonode> </control>
+         <control> <fromnode>Analyse</fromnode> <tonode>Adaptation</tonode> </control>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>Error</fromport>
+            <tonode>Adaptation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Calcul</tonode> <toport>numCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>NumAdapt</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>FileName</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode> <toport>FileName</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>MessInfo</fromport>
+            <tonode>Adaptation.default_Arret_boucle.Arret</tonode> <toport>MessInfo</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>Error</fromport>
+            <tonode>Analyse</tonode> <toport>ErrCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Analyse</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+      </bloc>
+      <datalink control="false">
+         <fromnode>Alternance_Calcul_HOMARD.Analyse</fromnode> <fromport>NumCalcP1</fromport>
+         <tonode>Alternance_Calcul_HOMARD.Analyse</tonode> <toport>NumCalc</toport>
+      </datalink>
+   </while>
+   <inline name="Bilan">
+      <script><code><![CDATA[
+from PyQt4 import QtGui
+import sys
+app = QtGui.QApplication(sys.argv)
+MessageBoxTitle = "Bilan"
+if MessInfo == "" :
+    MessInfo = "The convergence is reached."
+    QtGui.QMessageBox.information(None, MessageBoxTitle, MessInfo)
+else :
+    QtGui.QMessageBox.critical(None, MessageBoxTitle, MessInfo)
+]]></code></script>
+      <inport name="MessInfo" type="string"/>
+   </inline>
+   <control> <fromnode>DataInit</fromnode> <tonode>Etude_Initialisation</tonode> </control>
+   <control> <fromnode>Etude_Initialisation</fromnode> <tonode>Boucle_de_convergence</tonode> </control>
+   <control> <fromnode>Boucle_de_convergence</fromnode> <tonode>Bilan</tonode> </control>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode><toport>numCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence</tonode><toport>condition</toport>
+      <value><boolean>true</boolean></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>NumCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>ErrCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+PARAMETRES
+   <presentation name="__ROOT__" x="0" y="0" width="704" height="977" expanded="1" expx="0" expy="0" expWidth="704" expHeight="977" shownState="0"/>
+   <presentation name="DataInit" x="4" y="32" width="158" height="63" expanded="1" expx="4" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation" x="175" y="32" width="158" height="38" expanded="0" expx="175" expy="32" expWidth="162.5" expHeight="40.5" shownState="1"/>
+   <presentation name="Etude_Initialisation.StudyCreation" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Etude_Initialisation.SetCurrentStudy" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence" x="4" y="103" width="569" height="514" expanded="1" expx="4" expy="103" expWidth="569" expHeight="514" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD" x="4" y="59" width="561" height="451" expanded="1" expx="10" expy="59" expWidth="561" expHeight="451" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul" x="4" y="32" width="158" height="90" expanded="1" expx="4" expy="32" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse" x="181" y="32" width="158" height="171" expanded="1" expx="181" expy="32" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation" x="4" y="204" width="553" height="243" expanded="1" expx="4" expy="204" expWidth="553" expHeight="243" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle" x="4" y="59" width="166" height="153" expanded="1" expx="4" expy="59" expWidth="166" expHeight="153" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret" x="4" y="32" width="158" height="117" expanded="1" expx="4" expy="32" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD"  x="202" y="59" width="347" height="180" expanded="1" expx="202" expy="59" expWidth="347" expHeight="180" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation" x="4" y="32" width="158" height="65" expanded="0" expx="4" expy="32" expWidth="167" expHeight="67.5" shownState="1"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="59" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.Case_Options" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="322" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="1639.5" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec" x="185" y="32" width="158" height="144" expanded="1" expx="185" expy="32" expWidth="158" expHeight="144" shownState="0"/>
+   <presentation name="Bilan" x="350" y="32" width="158" height="63" expanded="1" expx="350" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+</proc>
diff --git a/resources/yacs_01.fr.xml b/resources/yacs_01.fr.xml
new file mode 100644 (file)
index 0000000..5ec67d6
--- /dev/null
@@ -0,0 +1,485 @@
+<?xml version='1.0' encoding='iso-8859-1' ?>
+<proc name="HOMARD">
+   <property name="DefaultStudyID" value="1"/>
+   <objref name="CALCIUM_real" id="IDL:Ports/Calcium_Ports/Calcium_Real_Port:1.0"/>
+   <type name="string" kind="string"/>
+   <struct name="Engines/dataref">
+      <member name="ref" type="string"/>
+   </struct>
+   <objref name="HOMARD_Boundary" id="IDL:HOMARD/HOMARD_Boundary:1.0"/>
+   <objref name="HOMARD_Cas" id="IDL:HOMARD/HOMARD_Cas:1.0"/>
+   <objref name="HOMARD_Hypothesis" id="IDL:HOMARD/HOMARD_Hypothesis:1.0"/>
+   <objref name="HOMARD_Iteration" id="IDL:HOMARD/HOMARD_Iteration:1.0"/>
+   <objref name="HOMARD_Zone" id="IDL:HOMARD/HOMARD_Zone:1.0"/>
+   <objref name="Study" id="IDL:SALOMEDS/Study:1.0"/>
+   <type name="bool" kind="bool"/>
+   <sequence name="boolvec" content="bool"/>
+   <type name="double" kind="double"/>
+   <sequence name="dblevec" content="double"/>
+   <objref name="file" id="file"/>
+   <type name="int" kind="int"/>
+   <sequence name="intvec" content="int"/>
+   <struct name="stringpair">
+      <member name="name" type="string"/>
+      <member name="value" type="string"/>
+   </struct>
+   <sequence name="propvec" content="stringpair"/>
+   <objref name="pyobj" id="python:obj:1.0"/>
+   <sequence name="seqboolvec" content="boolvec"/>
+   <sequence name="seqdblevec" content="dblevec"/>
+   <sequence name="seqint" content="int"/>
+   <sequence name="seqintvec" content="intvec"/>
+   <sequence name="stringvec" content="string"/>
+   <sequence name="seqstringvec" content="stringvec"/>
+   <container name="DefaultContainer">
+      <property name="container_name" value="FactoryServer"/>
+      <property name="name" value="localhost"/>
+   </container>
+   <datanode name="DataInit">
+      <parameter name="MeshFile" type="string">
+DataInit_MeshFile
+      </parameter>
+   </datanode>
+   <bloc name="Etude_Initialisation">
+      <inline name="StudyCreation">
+         <script><code><![CDATA[
+import orbmodule
+import SALOMEDS_idl
+
+import HOMARD
+import HOMARD_Gen_idl
+import HOMARD_Cas_idl
+import HOMARD_Iteration_idl
+import HOMARD_Hypothesis_idl
+import HOMARD_Zone_idl
+import HOMARD_Boundary_idl
+
+import salome
+salome.salome_init()
+CurrentStudy = salome.myStudy
+]]></code></script>
+         <outport name="CurrentStudy" type="Study"/>
+      </inline>
+      <service name="SetCurrentStudy">
+         <component>HOMARD</component>
+         <load container="DefaultContainer"/>
+         <method>SetCurrentStudy</method>
+         <inport name="theStudy" type="Study"/>
+      </service>
+      <control> <fromnode>StudyCreation</fromnode> <tonode>SetCurrentStudy</tonode> </control>
+      <datalink control="false">
+         <fromnode>StudyCreation</fromnode> <fromport>CurrentStudy</fromport>
+         <tonode>SetCurrentStudy</tonode> <toport>theStudy</toport>
+      </datalink>
+   </bloc>
+   <while name="Boucle_de_convergence">
+      <bloc name="Alternance_Calcul_HOMARD">
+         <inline name="Calcul">
+            <script><code><![CDATA[
+import sys
+import os
+#
+Alternance_Calcul_HOMARD_Calcul
+#
+argu  = ["-v"]
+argu.append("--rep_calc=" + rep_calc)
+argu.append("--num=%d" % numCalc)
+argu.append("--mesh_file="  + MeshFile)
+#
+Script_A = Script(argu)
+#
+Error, message_erreur, dico_resu = Script_A.compute ()
+#
+dico_resu["rep_calc"] = rep_calc
+#
+]]></code></script>
+            <inport name="numCalc" type="int"/>
+            <inport name="MeshFile" type="string"/>
+            <outport name="Error" type="int"/>
+            <outport name="dico_resu" type="pyobj"/>
+         </inline>
+         <inline name="Analyse">
+            <script><code><![CDATA[
+global NumCalc
+global resu1
+# Valeurs par defaut
+NumCalcP1 = NumCalc + 1
+FileName = " "
+#
+Analyse_Test_Convergence
+#
+MessInfo = None
+Error = 0
+while not Error :
+#
+# Si le calcul a fini en erreur, on arrete :
+#
+    if ErrCalc :
+        MessInfo = "Erreur de calcul numero %d" % ErrCalc
+        Error = abs(ErrCalc)
+        break
+#
+# Si le fichier n'a pas ete defini, on arrete :
+#
+    if dico_resu.has_key("FileName") :
+        FileName = dico_resu["FileName"]
+    else :
+        MessInfo = "Le fichier du maillage n'a pas ete defini"
+        Error = -2
+        break
+#
+# Si le critere est respecte, on arrete :
+#
+    if dico_resu.has_key("V_TEST") :
+        valeur_v = dico_resu["V_TEST"]
+        if NumCalc == 0 :
+            resu1 = [valeur_v]
+        else :
+            resu1.append(valeur_v)
+        if NumCalc > 2 :
+            solu_m1 = resu1[-2]
+            rap = ( resu1[-1] - solu_m1 ) / solu_m1
+            if abs(rap) < 0.001 :
+                MessInfo = ""
+                Error = -9999
+                break
+    else :
+        MessInfo = "La valeur a tester n'a pas ete fournie"
+        Error = -3
+        break
+#
+# Si on depasse le maximum, on arrete :
+#
+    if MaxIter > 0 :
+      if NumCalc >= MaxIter :
+          MessInfo = "La limite en nombre de calculs a ete atteinte : %d" % (MaxIter+1)
+          Error = -1
+          break
+#
+    break
+]]></code></script>
+            <inport name="NumCalc" type="int"/>
+            <inport name="ErrCalc" type="int"/>
+            <inport name="dico_resu" type="pyobj"/>
+            <outport name="Error" type="int"/>
+            <outport name="NumCalcP1" type="int"/>
+            <outport name="FileName" type="string"/>
+            <outport name="MessInfo" type="string"/>
+         </inline>
+         <switch name="Adaptation" select="0">
+            <default>
+               <bloc name="Arret_boucle">
+                  <inline name="Arret">
+                     <script><code><![CDATA[
+OK = 0
+MeshFile = " "
+]]></code></script>
+                     <inport name="MessInfo" type="string"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MeshFile" type="string"/>
+                     <outport name="MessInfo" type="string"/>
+                  </inline>
+               </bloc>
+            </default>
+            <case id="0">
+               <bloc name="Adaptation_HOMARD">
+                  <switch name="HOMARD_Initialisation" select="0">
+                     <default>
+                        <bloc name="Iter_n">
+                           <service name="LastIteration">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>LastIteration</method>
+                              <inport name="CaseName" type="string"/>
+                              <outport name="return" type="HOMARD_Iteration"/>
+                           </service>
+                           <service name="GetHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>GetHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+                           <control> <fromnode>LastIteration</fromnode> <tonode>GetHypothesis</tonode> </control>
+                        </bloc>
+                     </default>
+                     <case id="1">
+                        <bloc name="Iter_1">
+                           <service name="CreateCase">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateCase</method>
+                              <inport name="CaseName" type="string"/>
+                              <inport name="MeshName" type="string"/>
+                              <inport name="FileName" type="string"/>
+                              <outport name="return" type="HOMARD_Cas"/>
+                           </service>
+                           <inline name="Case_Options">
+                              <script><code><![CDATA[
+import os
+# Repertoire d'adaptation
+Iter_1_Case_Options
+# Iteration 0 associee
+Iter0 = Case.GetIter0()
+]]></code></script>
+                              <inport name="Case" type="HOMARD_Cas"/>
+                              <outport name="Iter0" type="HOMARD_Iteration"/>
+                           </inline>
+                           <service name="CreateHypothesis">
+                              <node>Etude_Initialisation.SetCurrentStudy</node>
+                              <method>CreateHypothesis</method>
+                              <inport name="HypoName" type="string"/>
+                              <outport name="return" type="HOMARD_Hypothesis"/>
+                           </service>
+Iter_1
+                           <datalink control="false">
+                              <fromnode>CreateCase</fromnode> <fromport>return</fromport>
+                              <tonode>Case_Options</tonode> <toport>Case</toport>
+                           </datalink>
+                        </bloc>
+                     </case>
+                  </switch>
+                  <inline name="HOMARD_Exec">
+                     <script><code><![CDATA[
+import os
+# Repertoire d'execution
+HOMARD_Exec_DirName
+HOMARD_Exec_MeshName
+#
+# Hypothese
+# =========
+# . Nom de l'hypothese
+# --------------------
+HypoName = Hypo.GetName()
+#
+# . Options
+# ---------
+HOMARD_Exec_Hypo_Options
+#
+# Nom de la future iteration
+# ==========================
+# . Nom de l'iteration precedente
+LastIterName = LastIter.GetName()
+aux = '%03d' % NumAdapt
+# . A l'iteration 1, on complete
+if  NumAdapt == 1 :
+  IterName = LastIterName + "_" + aux
+# . Ensuite, on substitue
+else :
+  IterName = LastIterName[:-3] + aux
+#
+# Creation de l'iteration
+# =======================
+Iter = LastIter.NextIteration(IterName)
+#
+# Options de l'iteration
+# ======================
+# . Association de l'hypothese
+Iter.AssociateHypo(HypoName)
+#
+# . Le nom du futur maillage
+Iter.SetMeshName(MeshName)
+#
+# . Le fichier du futur maillage
+aux = '%02d' % NumAdapt
+MeshFile = os.path.join (DirName, "maill."+aux+".med")
+Iter.SetMeshFile(MeshFile)
+#
+# . Le fichier contenant les champs
+FileName = dico_resu["FileName"]
+Iter.SetFieldFile(FileName)
+#
+HOMARD_Exec_Iter_Options
+#
+# Calcul
+# ======
+Error = Iter.Compute(1,1)
+#
+# Arret de la boucle si erreur
+# ============================
+if Error :
+    OK = 0
+    MessInfo = "Erreur dans HOMARD pour l'adaptation numero %d" % NumAdapt
+else :
+    OK = 1
+    MessInfo = " "
+]]></code></script>
+                     <inport name="NumAdapt" type="int"/>
+                     <inport name="LastIter" type="HOMARD_Iteration"/>
+                     <inport name="Hypo" type="HOMARD_Hypothesis"/>
+                     <inport name="dico_resu" type="pyobj"/>
+                     <outport name="OK" type="bool"/>
+                     <outport name="MessInfo" type="string"/>
+                     <outport name="MeshFile" type="string"/>
+                  </inline>
+                  <control> <fromnode>HOMARD_Initialisation</fromnode> <tonode>HOMARD_Exec</tonode> </control>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.LastIteration</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.Case_Options</fromnode> <fromport>Iter0</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>LastIter</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.default_Iter_n.GetHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+                  <datalink control="false">
+                     <fromnode>HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</fromnode> <fromport>return</fromport>
+                     <tonode>HOMARD_Exec</tonode> <toport>Hypo</toport>
+                  </datalink>
+               </bloc>
+            </case>
+         </switch>
+         <control> <fromnode>Calcul</fromnode> <tonode>Analyse</tonode> </control>
+         <control> <fromnode>Analyse</fromnode> <tonode>Adaptation</tonode> </control>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>Error</fromport>
+            <tonode>Adaptation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Calcul</tonode> <toport>numCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode> <toport>select</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>NumCalcP1</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>NumAdapt</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>FileName</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode> <toport>FileName</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Analyse</fromnode> <fromport>MessInfo</fromport>
+            <tonode>Adaptation.default_Arret_boucle.Arret</tonode> <toport>MessInfo</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>Error</fromport>
+            <tonode>Analyse</tonode> <toport>ErrCalc</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Analyse</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Calcul</fromnode> <fromport>dico_resu</fromport>
+            <tonode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</tonode> <toport>dico_resu</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+         <datalink control="false">
+            <fromnode>Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MeshFile</fromport>
+            <tonode>Calcul</tonode> <toport>MeshFile</toport>
+         </datalink>
+      </bloc>
+      <datalink control="false">
+         <fromnode>Alternance_Calcul_HOMARD.Analyse</fromnode> <fromport>NumCalcP1</fromport>
+         <tonode>Alternance_Calcul_HOMARD.Analyse</tonode> <toport>NumCalc</toport>
+      </datalink>
+   </while>
+   <inline name="Bilan">
+      <script><code><![CDATA[
+from PyQt4 import QtGui
+import sys
+app = QtGui.QApplication(sys.argv)
+MessageBoxTitle = "Bilan"
+if MessInfo == "" :
+    MessInfo = "Le calcul est converge."
+    QtGui.QMessageBox.information(None, MessageBoxTitle, MessInfo)
+else :
+    QtGui.QMessageBox.critical(None, MessageBoxTitle, MessInfo)
+]]></code></script>
+      <inport name="MessInfo" type="string"/>
+   </inline>
+   <control> <fromnode>DataInit</fromnode> <tonode>Etude_Initialisation</tonode> </control>
+   <control> <fromnode>Etude_Initialisation</fromnode> <tonode>Boucle_de_convergence</tonode> </control>
+   <control> <fromnode>Boucle_de_convergence</fromnode> <tonode>Bilan</tonode> </control>
+   <datalink control="false">
+      <fromnode>DataInit</fromnode> <fromport>MeshFile</fromport>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode> <toport>MeshFile</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>OK</fromport>
+      <tonode>Boucle_de_convergence</tonode> <toport>condition</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <datalink control="false">
+      <fromnode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec</fromnode> <fromport>MessInfo</fromport>
+      <tonode>Bilan</tonode> <toport>MessInfo</toport>
+   </datalink>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul</tonode><toport>numCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation</tonode><toport>select</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration</tonode><toport>CaseName</toport>
+      <value><string>Calcul</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis</tonode><toport>HypoName</toport>
+      <value><string>Hypo</string></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence</tonode><toport>condition</toport>
+      <value><boolean>true</boolean></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>NumCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+   <parameter>
+      <tonode>Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse</tonode><toport>ErrCalc</toport>
+      <value><int>0</int></value>
+   </parameter>
+PARAMETRES
+   <presentation name="__ROOT__" x="0" y="0" width="704" height="977" expanded="1" expx="0" expy="0" expWidth="704" expHeight="977" shownState="0"/>
+   <presentation name="DataInit" x="4" y="32" width="158" height="63" expanded="1" expx="4" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+   <presentation name="Etude_Initialisation" x="175" y="32" width="158" height="38" expanded="0" expx="175" expy="32" expWidth="162.5" expHeight="40.5" shownState="1"/>
+   <presentation name="Etude_Initialisation.StudyCreation" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Etude_Initialisation.SetCurrentStudy" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence" x="4" y="103" width="569" height="514" expanded="1" expx="4" expy="103" expWidth="569" expHeight="514" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD" x="4" y="59" width="561" height="451" expanded="1" expx="10" expy="59" expWidth="561" expHeight="451" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Calcul" x="4" y="32" width="158" height="90" expanded="1" expx="4" expy="32" expWidth="158" expHeight="90" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Analyse" x="181" y="32" width="158" height="171" expanded="1" expx="181" expy="32" expWidth="158" expHeight="171" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation" x="4" y="204" width="553" height="243" expanded="1" expx="4" expy="204" expWidth="553" expHeight="243" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle" x="4" y="59" width="166" height="153" expanded="1" expx="4" expy="59" expWidth="166" expHeight="153" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.default_Arret_boucle.Arret" x="4" y="32" width="158" height="117" expanded="1" expx="4" expy="32" expWidth="158" expHeight="117" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD"  x="202" y="59" width="347" height="180" expanded="1" expx="202" expy="59" expWidth="347" expHeight="180" shownState="0"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation" x="4" y="32" width="158" height="65" expanded="0" expx="4" expy="32" expWidth="167" expHeight="67.5" shownState="1"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="59" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.Case_Options" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="322" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n" x="0" y="0" width="162.5" height="40.5" expanded="1" expx="4" expy="1639.5" expWidth="162.5" expHeight="40.5" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.LastIteration" x="0" y="0" width="158" height="36" expanded="1" expx="4" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.default_Iter_n.GetHypothesis" x="0" y="0" width="158" height="36" expanded="1" expx="163" expy="32" expWidth="158" expHeight="36" shownState="2"/>
+   <presentation name="Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Exec" x="185" y="32" width="158" height="144" expanded="1" expx="185" expy="32" expWidth="158" expHeight="144" shownState="0"/>
+   <presentation name="Bilan" x="350" y="32" width="158" height="63" expanded="1" expx="350" expy="32" expWidth="158" expHeight="63" shownState="0"/>
+</proc>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..1226a56
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+##
+# Common packages
+##
+SET(SUBDIRS_COMMON
+  HOMARD
+  HOMARD_I
+  HOMARDGUI
+  HOMARD_SWIG
+  tests
+)
+
+SET(SUBDIRS
+  ${SUBDIRS_COMMON}
+)
+
+FOREACH(dir ${SUBDIRS})
+  ADD_SUBDIRECTORY(${dir})
+ENDFOREACH(dir ${SUBDIRS})
+
+
diff --git a/src/CTestTestfileInstall.cmake b/src/CTestTestfileInstall.cmake
new file mode 100644 (file)
index 0000000..d6c725b
--- /dev/null
@@ -0,0 +1,25 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# Add all test subdirs
+SUBDIRS(
+    tests
+    )
+
+
diff --git a/src/HOMARD/CMakeLists.txt b/src/HOMARD/CMakeLists.txt
new file mode 100644 (file)
index 0000000..982b9af
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# --- options ---
+# additional include directories
+INCLUDE_DIRECTORIES(
+  ${KERNEL_INCLUDE_DIRS}
+)
+
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(
+  ${KERNEL_DEFINITIONS}
+)
+
+# libraries to link to
+SET(_link_LIBRARIES
+  ${KERNEL_SALOMELocalTrace}
+)
+
+# --- headers ---
+
+# header files
+SET(HOMARDImpl_HEADERS
+  HOMARD.hxx
+  HOMARD_Cas.hxx
+  HOMARD_Boundary.hxx
+  HOMARD_Hypothesis.hxx
+  HOMARD_Iteration.hxx
+  HOMARD_Zone.hxx
+  HOMARD_Gen.hxx
+  HOMARD_DriverTools.hxx
+  HOMARD_YACS.hxx
+  HomardDriver.hxx
+  YACSDriver.hxx
+)
+
+# --- sources ---
+
+# sources / static
+SET(HOMARDImpl_SOURCES
+  HOMARD_Cas.cxx
+  HOMARD_Boundary.cxx
+  HOMARD_Hypothesis.cxx
+  HOMARD_Iteration.cxx
+  HOMARD_Zone.cxx
+  HOMARD_Gen.cxx
+  HOMARD_DriverTools.cxx
+  HOMARD_YACS.cxx
+  HomardDriver.cxx
+  YACSDriver.cxx
+)
+
+# --- rules ---
+
+ADD_LIBRARY(HOMARDImpl ${HOMARDImpl_SOURCES})
+TARGET_LINK_LIBRARIES(HOMARDImpl ${_link_LIBRARIES} )
+INSTALL(TARGETS HOMARDImpl EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
+INSTALL(FILES ${HOMARDImpl_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/HOMARD/HOMARD.hxx b/src/HOMARD/HOMARD.hxx
new file mode 100644 (file)
index 0000000..c1cbadc
--- /dev/null
@@ -0,0 +1,53 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : HOMARD.hxx
+//  Author : Gerald NICOLAS, EDF
+//  Module : HOMARD
+
+#ifndef _HOMARD_HXX_
+#define _HOMARD_HXX_
+
+// C'est le ASSERT de SALOMELocalTrace/utilities.h dans KERNEL
+#ifndef VERIFICATION
+#define VERIFICATION(condition) \
+        if (!(condition)){INTERRUPTION("CONDITION "<<#condition<<" NOT VERIFIED")}
+#endif /* VERIFICATION */
+
+#ifdef WIN32
+  #if defined HOMARDIMPL_EXPORTS || defined HOMARDImpl_EXPORTS
+    #define HOMARDIMPL_EXPORT __declspec( dllexport )
+  #else
+    #define HOMARDIMPL_EXPORT __declspec( dllimport )
+  #endif
+#else
+   #define HOMARDIMPL_EXPORT
+#endif
+
+// La gestion des repertoires
+#ifndef CHDIR
+  #ifdef WIN32
+    #define CHDIR _chdir
+  #else
+    #define CHDIR chdir
+  #endif
+#endif
+
+#endif
index 6414f6bc7c50cb3c2faa890f16c3a78fb926de03..48dd23f52453cb2c0391c3204b56333948ea24d7 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Boundary.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #include "HOMARD_Boundary.hxx"
+#include "HOMARD.hxx"
 #include "utilities.h"
 
 //=============================================================================
@@ -31,7 +41,7 @@
  */
 //=============================================================================
 HOMARD_Boundary::HOMARD_Boundary():
-  _NomBoundary( "" ),_BoundaryType( 1 ),
+  _Name( "" ),_Type( 1 ),
   _Xmin( 0 ), _Xmax( 0 ), _Ymin( 0 ), _Ymax( 0 ), _Zmin( 0 ), _Zmax( 0 ),
   _Xaxe( 0 ), _Yaxe( 0 ), _Zaxe( 0 ),
   _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _rayon( 0 ),
@@ -45,78 +55,88 @@ HOMARD_Boundary::~HOMARD_Boundary()
 {
   MESSAGE("~HOMARD_Boundary");
 }
-
 //=============================================================================
-void HOMARD_Boundary::SetName( const char* NomBoundary )
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary::SetName( const char* Name )
 {
-  MESSAGE("SetName = "<<NomBoundary);
-  _NomBoundary = std::string( NomBoundary );
+  _Name = std::string( Name );
 }
-
 //=============================================================================
 std::string HOMARD_Boundary::GetName() const
 {
-  return _NomBoundary;
+  return _Name;
 }
-
 //=============================================================================
 std::string HOMARD_Boundary::GetDumpPython() const
 {
   std::ostringstream aScript;
   aScript << "\n# Creation of the ";
 //
-  switch (_BoundaryType)
+  switch (_Type)
   {
     case 0:
     {
-      aScript << "discrete boundary " << _NomBoundary << "\n";
-      aScript << "\t" << _NomBoundary << " = homard.CreateBoundaryDi(\"" << _NomBoundary << "\", ";
+      aScript << "discrete boundary " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundaryDi(\"" << _Name << "\", ";
       aScript << "\"" << _MeshName << "\", ";
       aScript << "\"" << _MeshFile << "\")\n";
       break ;
     }
     case 1:
     {
-      aScript << "cylinder " << _NomBoundary << "\n";
-      aScript << "\t" << _NomBoundary << " = homard.CreateBoundaryCylinder(\"" << _NomBoundary << "\", ";
+      aScript << "cylinder " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundaryCylinder(\"" << _Name << "\", ";
       aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _rayon << ")\n";
       break ;
     }
     case 2:
     {
-      aScript << "sphere" << _NomBoundary << "\n";
-      aScript << "\t" << _NomBoundary << " = homard.CreateBoundarySphere(\"" << _NomBoundary << "\", ";
+      aScript << "sphere " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundarySphere(\"" << _Name << "\", ";
       aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _rayon << ")\n";
       break ;
     }
+    case 3:
+    {
+      aScript << "cone " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundaryConeA(\"" << _Name << "\", ";
+      aScript << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Angle << ", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ")\n";
+      break ;
+    }
+    case 4:
+    {
+      aScript << "cone " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundaryConeR(\"" << _Name << "\", ";
+      aScript << _Xcentre1 << ", " << _Ycentre1 << ", " << _Zcentre1 << ", " << _Rayon1 << ", " << _Xcentre2 << ", " << _Ycentre2 << ", " << _Zcentre2 << ", " << _Rayon2 << ")\n";
+      break ;
+    }
+    case 5:
+    {
+      aScript << "tore " << _Name << "\n";
+      aScript << "\t" << _Name << " = homard.CreateBoundaryTorus(\"" << _Name << "\", ";
+      aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon1 << ", " << _Rayon2 << ")\n";
+      break ;
+    }
   }
 
   return aScript.str();
 }
-
-
 //=============================================================================
-void HOMARD_Boundary::SetBoundaryType( int BoundaryType )
-{
-  MESSAGE("SetBoundaryType = "<<BoundaryType);
-  _BoundaryType = BoundaryType;
-}
-
 //=============================================================================
-int HOMARD_Boundary::GetBoundaryType() const
-{
-  return _BoundaryType;
-}
-
+// Caracteristiques
 //=============================================================================
-void HOMARD_Boundary::SetMeshFile( const char* MeshFile )
+//=============================================================================
+void HOMARD_Boundary::SetType( int Type )
 {
-  _MeshFile = std::string( MeshFile );
+  _Type = Type;
 }
 //=============================================================================
-std::string HOMARD_Boundary::GetMeshFile() const
+int HOMARD_Boundary::GetType() const
 {
-  return _MeshFile;
+  return _Type;
 }
 //=============================================================================
 void HOMARD_Boundary::SetMeshName( const char* MeshName )
@@ -128,44 +148,62 @@ std::string HOMARD_Boundary::GetMeshName() const
 {
   return _MeshName;
 }
-//======================================================================
-void HOMARD_Boundary::SetLimit( double X0, double X1, double X2 )
+//=============================================================================
+void HOMARD_Boundary::SetMeshFile( const char* MeshFile )
 {
-  _Xincr = X0; _Yincr = X1; _Zincr = X2;
+  _MeshFile = std::string( MeshFile );
+}
+//=============================================================================
+std::string HOMARD_Boundary::GetMeshFile() const
+{
+  return _MeshFile;
 }
 //=======================================================================================
 void HOMARD_Boundary::SetCylinder( double X0, double X1, double X2,
                                    double X3, double X4, double X5, double X6 )
 {
-  _Xcentre = X0; _Ycentre = X1;
-  _Zcentre = X2; _Xaxe = X3;
-  _Yaxe = X4; _Zaxe = X5;
+  _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
+  _Xaxe = X3; _Yaxe = X4; _Zaxe = X5;
   _rayon = X6;
 }
-
 //======================================================================
 void HOMARD_Boundary::SetSphere( double X0, double X1, double X2, double X3 )
 {
   _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
   _rayon = X3;
 }
-
+//======================================================================
+void HOMARD_Boundary::SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2)
+{
+  _Xcentre1 = Xcentre1; _Ycentre1 = Ycentre1; _Zcentre1 = Zcentre1;
+  _Rayon1 = Rayon1;
+  _Xcentre2 = Xcentre2; _Ycentre2 = Ycentre2; _Zcentre2 = Zcentre2;
+  _Rayon2 = Rayon2;
+}
+//======================================================================
+void HOMARD_Boundary::SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                double Xcentre, double Ycentre, double Zcentre)
+{
+  _Xaxe = Xaxe; _Yaxe = Yaxe; _Zaxe = Zaxe;
+  _Angle = Angle;
+  _Xcentre = Xcentre; _Ycentre = Ycentre; _Zcentre = Zcentre;
+}
 //=======================================================================================
-std::vector<double> HOMARD_Boundary::GetLimit() const
+void HOMARD_Boundary::SetTorus( double X0, double X1, double X2,
+                                double X3, double X4, double X5, double X6, double X7 )
 {
-  std::vector<double> mesLimit;
-  mesLimit.push_back( _Xincr );
-  mesLimit.push_back( _Yincr );
-  mesLimit.push_back( _Zincr );
-  return mesLimit;
+  _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
+  _Xaxe = X3; _Yaxe = X4; _Zaxe = X5;
+  _Rayon1 = X6;
+  _Rayon2 = X7;
 }
-
 //=======================================================================================
 std::vector<double> HOMARD_Boundary::GetCoords() const
 {
   std::vector<double> mesCoor;
 //
-  switch (_BoundaryType)
+  switch (_Type)
   {
 //  Cylindre
     case 1:
@@ -188,26 +226,66 @@ std::vector<double> HOMARD_Boundary::GetCoords() const
       mesCoor.push_back( _rayon );
       break ;
     }
-    ASSERT ( _BoundaryType == -1 ) ;
+//  Cone defini par un axe et un angle
+    case 3:
+    {
+      mesCoor.push_back( _Xaxe );
+      mesCoor.push_back( _Yaxe );
+      mesCoor.push_back( _Zaxe );
+      mesCoor.push_back( _Angle );
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      break ;
+    }
+//  Cone defini par les 2 rayons
+    case 4:
+    {
+      mesCoor.push_back( _Xcentre1 );
+      mesCoor.push_back( _Ycentre1 );
+      mesCoor.push_back( _Zcentre1 );
+      mesCoor.push_back( _Rayon1 );
+      mesCoor.push_back( _Xcentre2 );
+      mesCoor.push_back( _Ycentre2 );
+      mesCoor.push_back( _Zcentre2 );
+      mesCoor.push_back( _Rayon2 );
+      break ;
+    }
+//  Tore
+    case 5:
+    {
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      mesCoor.push_back( _Xaxe );
+      mesCoor.push_back( _Yaxe );
+      mesCoor.push_back( _Zaxe );
+      mesCoor.push_back( _Rayon1 );
+      mesCoor.push_back( _Rayon2 );
+      break ;
+    }
+    VERIFICATION( (_Type>=1) && (_Type<=5) ) ;
   }
   return mesCoor;
 }
-//=============================================================================
-/*!
- */
-//=============================================================================
-void HOMARD_Boundary::SetCaseCreation( const char* NomCasCreation )
+//======================================================================
+void HOMARD_Boundary::SetLimit( double X0, double X1, double X2 )
 {
-  _NomCasCreation = std::string( NomCasCreation );
+  _Xincr = X0; _Yincr = X1; _Zincr = X2;
+}
+//=======================================================================================
+std::vector<double> HOMARD_Boundary::GetLimit() const
+{
+  std::vector<double> mesLimit;
+  mesLimit.push_back( _Xincr );
+  mesLimit.push_back( _Yincr );
+  mesLimit.push_back( _Zincr );
+  return mesLimit;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
-const std::list<std::string>& HOMARD_Boundary::GetGroups() const
+void HOMARD_Boundary::AddGroup( const char* Group)
 {
-  return _ListGroupSelected;
+  _ListGroupSelected.push_back(Group);
 }
 //=============================================================================
 void HOMARD_Boundary::SetGroups( const std::list<std::string>& ListGroup )
@@ -218,14 +296,19 @@ void HOMARD_Boundary::SetGroups( const std::list<std::string>& ListGroup )
     _ListGroupSelected.push_back((*it++));
 }
 //=============================================================================
-void HOMARD_Boundary::AddGroup( const char* Group)
+const std::list<std::string>& HOMARD_Boundary::GetGroups() const
 {
-  _ListGroupSelected.push_back(Group);
+  return _ListGroupSelected;
 }
-
 //=============================================================================
-/*!
-*/
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary::SetCaseCreation( const char* NomCasCreation )
+{
+  _NomCasCreation = std::string( NomCasCreation );
+}
 //=============================================================================
 std::string HOMARD_Boundary::GetCaseCreation() const
 {
index 011a99988fc54571018f0c4e5b04667fcfd2c672..aa2fd594cc4707740b419a2d88634f274687eee0 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Boundary.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #ifndef _HOMARD_Boundary_HXX_
 #define _HOMARD_Boundary_HXX_
 
+#include "HOMARD.hxx"
+
 #include <vector>
 #include <string>
 #include <list>
 
-class HOMARD_Boundary
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+class HOMARDIMPL_EXPORT HOMARD_Boundary
 {
 public:
   HOMARD_Boundary();
   ~HOMARD_Boundary();
 
-  void                          SetName( const char* NomBoundary );
+// Generalites
+  void                          SetName( const char* Name );
   std::string                   GetName() const;
-  std::string                   GetDumpPython() const;
 
-  void                          SetLimit( double X0, double X1, double X2 );
-  std::vector<double>           GetLimit() const;
+  std::string                   GetDumpPython() const;
 
-  void                          SetMeshFile( const char* MeshFile );
-  std::string                   GetMeshFile() const;
+// Caracteristiques
+  void                          SetType( int Type );
+  int                           GetType() const;
 
   void                          SetMeshName( const char* MeshName );
   std::string                   GetMeshName() const;
 
+  void                          SetMeshFile( const char* MeshFile );
+  std::string                   GetMeshFile() const;
+
   void                          SetCylinder( double X0, double X1, double X2, double X3,
                                              double X4, double X5, double X6 );
   void                          SetSphere( double X0, double X1, double X2, double X3 );
-  std::vector<double>           GetCoords() const;
+  void                          SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                          double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2);
+  void                          SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                          double Xcentre, double Ycentre, double ZCentre);
+  void                          SetTorus( double X0, double X1, double X2, double X3,
+                                             double X4, double X5, double X6, double X7 );
 
-  void                          SetBoundaryType( int BoundaryType );
-  int                           GetBoundaryType() const;
+  std::vector<double>           GetCoords() const;
 
-  std::string                   GetCaseCreation() const;
-  void                          SetCaseCreation( const char* NomCasCreation );
+  void                          SetLimit( double X0, double X1, double X2 );
+  std::vector<double>           GetLimit() const;
 
   void                          AddGroup( const char* LeGroupe);
   void                          SetGroups(const std::list<std::string>& ListGroup );
   const std::list<std::string>& GetGroups() const;
 
+// Liens avec les autres structures
+  std::string                   GetCaseCreation() const;
+  void                          SetCaseCreation( const char* NomCasCreation );
+
 private:
-  std::string                   _NomBoundary;
+  std::string                   _Name;
   std::string                   _NomCasCreation;
   std::string                   _MeshFile;
   std::string                   _MeshName;
-  int                           _BoundaryType;
+  int                           _Type;
   double                        _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax;
   double                        _Xaxe, _Yaxe, _Zaxe;
   double                        _Xcentre, _Ycentre, _Zcentre, _rayon;
   double                        _Xincr, _Yincr, _Zincr;
+  double                        _Xcentre1, _Ycentre1, _Zcentre1, _Rayon1;
+  double                        _Xcentre2, _Ycentre2, _Zcentre2, _Rayon2;
+  double                        _Angle;
 
   std::list<std::string>        _ListGroupSelected;
 
index 17537bea8f6fb679eb35d3193fba70b1cf648308..9e23c1ceede2da695f941fb7408ddc7e715444b0 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Cas.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #include "HOMARD_Cas.hxx"
 #include "utilities.h"
+#include "HOMARD.hxx"
 #include <iostream>
+#include <sys/stat.h>
 
 #ifndef WIN32
-# include <unistd.h>
+#include <unistd.h>
+#else
+#include <direct.h>
 #endif
 
 //=============================================================================
@@ -37,7 +50,7 @@
  */
 //=============================================================================
 HOMARD_Cas::HOMARD_Cas():
-  _NomCas(""), _NomDir("/tmp"), _ConfType(1)
+  _Name(""), _NomDir("/tmp"), _ConfType(0), _ExtType(0)
 {
   MESSAGE("HOMARD_Cas");
 }
@@ -47,60 +60,35 @@ HOMARD_Cas::~HOMARD_Cas()
 {
   MESSAGE("~HOMARD_Cas");
 }
-
 //=============================================================================
-void HOMARD_Cas::SetDirName( const char* NomDir )
 //=============================================================================
-{
-     MESSAGE("SetDirName, NomDir :  "<<NomDir);
-     if (chdir(NomDir) == 0)
-     {
-       _NomDir = std::string( NomDir );
-     }
-    else
-    {
-       // GERALD -- QMESSAGE BOX
-       // std::cerr << "Pb pour entrer dans le repertoire :  "<<NomDir << std::endl;
-       _NomDir = "/tmp";
-    };
-}
-
+// Generalites
 //=============================================================================
-std::string HOMARD_Cas::GetDirName() const
 //=============================================================================
+void HOMARD_Cas::SetName( const char* Name )
 {
-  return _NomDir;
+  _Name = std::string( Name );
 }
-
-//=============================================================================
-void HOMARD_Cas::SetName( const char* NomCas )
-//=============================================================================
-{
-  _NomCas = std::string( NomCas );
-}
-
 //=============================================================================
 std::string HOMARD_Cas::GetName() const
-//=============================================================================
 {
-  return _NomCas;
+  return _Name;
 }
-
-
 //=============================================================================
 std::string HOMARD_Cas::GetDumpPython() const
-//=============================================================================
 {
   std::ostringstream aScript;
-  aScript << "\t" <<_NomCas << ".SetDirName(\"";
+  aScript << "\t" <<_Name << ".SetDirName(\"";
   aScript << _NomDir << "\")\n";
-  aScript << "\t" <<_NomCas << ".SetConfType(";
+  aScript << "\t" <<_Name << ".SetConfType(";
   aScript << _ConfType << ")\n";
+  aScript << "\t" <<_Name << ".SetExtType(";
+  aScript << _ExtType << ")\n";
 // Suivi de frontieres
   std::list<std::string>::const_iterator it = _ListBoundaryGroup.begin();
   while(it != _ListBoundaryGroup.end())
   {
-    aScript << "\t" <<_NomCas << ".AddBoundaryGroup(\"";
+    aScript << "\t" <<_Name << ".AddBoundaryGroup(\"";
     aScript << *it << "\", \"";
     it++;
     aScript << *it << "\")\n";
@@ -108,76 +96,95 @@ std::string HOMARD_Cas::GetDumpPython() const
   }
   if ( _Pyram > 0 )
   {
-    aScript << "\t" <<_NomCas << ".SetPyram(";
+    aScript << "\t" <<_Name << ".SetPyram(";
     aScript << _Pyram << ")\n";
   }
 
   return aScript.str();
 }
 //=============================================================================
-void HOMARD_Cas::AddIteration( const char* NomIteration )
 //=============================================================================
-{
-  _ListIter.push_back( std::string( NomIteration ) );
-}
-
+// Caracteristiques
 //=============================================================================
-const std::list<std::string>& HOMARD_Cas::GetIterations() const
 //=============================================================================
+int HOMARD_Cas::SetDirName( const char* NomDir )
 {
-  return _ListIter;
-}
+  MESSAGE("SetDirName,  NomDir : "<<NomDir);
+  MESSAGE("SetDirName, _NomDir : "<<_NomDir);
+  int erreur = 0 ;
+  // On vérifie qu'aucun calcul n'a eu lieu pour ce cas
+  MESSAGE("SetDirName, _ListIter.size() : "<<_ListIter.size());
+  if ( _ListIter.size() > 1 ) { erreur = 1 ; }
+  // Creation
+  if ( CHDIR(NomDir) == 0 )
+  { _NomDir = std::string( NomDir ); }
+  else
+  {
 
+#ifndef WIN32
+    if ( mkdir(NomDir, S_IRWXU|S_IRGRP|S_IXGRP) == 0 )
+#else
+    if ( _mkdir(NomDir) == 0 )
+#endif
+    {
+      if ( CHDIR(NomDir) == 0 ) { _NomDir = std::string( NomDir ); }
+      else                      { erreur = 2 ; }
+    }
+    else { erreur = 2 ; }
+  };
+  return erreur ;
+}
 //=============================================================================
-void HOMARD_Cas::SupprIterations()
-//=============================================================================
+std::string HOMARD_Cas::GetDirName() const
 {
-  _ListIter.clear();
+  return _NomDir;
 }
-
-//=============================================================================
-std::string HOMARD_Cas::GetIter0Name() const
 //=============================================================================
+int HOMARD_Cas::GetNumberofIter()
 {
-// Par construction de la liste, l'iteration a ete mise en tete.
-  return (*(_ListIter.begin()));
+  return _ListIter.size();
 }
-
+//
+// Le type de conformite ou non conformite
+//
 //=============================================================================
 void HOMARD_Cas::SetConfType( int Conftype )
-//=============================================================================
 {
+//   VERIFICATION( (Conftype>=-2) && (Conftype<=3) );
   _ConfType = Conftype;
 }
 //=============================================================================
 const int HOMARD_Cas::GetConfType() const
-//=============================================================================
 {
   return _ConfType;
 }
+//
+// Le type exterieur
+//
 //=============================================================================
-int HOMARD_Cas::GetNumber()
+void HOMARD_Cas::SetExtType( int ExtType )
+{
+//   VERIFICATION( (ExtType>=0) && (ExtType<=2) );
+  _ExtType = ExtType;
+}
 //=============================================================================
-
+const int HOMARD_Cas::GetExtType() const
 {
-  return _ListIter.size();
+  return _ExtType;
 }
 //
 // La boite englobante
 //
 //=============================================================================
 void HOMARD_Cas::SetBoundingBox( const std::vector<double>& extremas )
-//=============================================================================
 {
   _Boite.clear();
   _Boite.resize( extremas.size() );
   for ( int i = 0; i < extremas.size(); i++ )
     _Boite[i] = extremas[i];
 }
-
 //=============================================================================
 const std::vector<double>& HOMARD_Cas::GetBoundingBox() const
-//=============================================================================
 {
   return _Boite;
 }
@@ -185,20 +192,12 @@ const std::vector<double>& HOMARD_Cas::GetBoundingBox() const
 // Les groupes
 //
 //=============================================================================
-const std::list<std::string>& HOMARD_Cas::GetGroups() const
-//=============================================================================
-{
-  return _ListGroup;
-}
-//=============================================================================
-void HOMARD_Cas::SupprGroups()
-//=============================================================================
+void HOMARD_Cas::AddGroup( const char* Group )
 {
-  _ListGroup.clear();
+  _ListGroup.push_back(Group);
 }
 //=============================================================================
 void HOMARD_Cas::SetGroups( const std::list<std::string>& ListGroup )
-//=============================================================================
 {
   _ListGroup.clear();
   std::list<std::string>::const_iterator it = ListGroup.begin();
@@ -208,42 +207,70 @@ void HOMARD_Cas::SetGroups( const std::list<std::string>& ListGroup )
   }
 }
 //=============================================================================
-void HOMARD_Cas::AddGroup( const char* Group )
+const std::list<std::string>& HOMARD_Cas::GetGroups() const
 {
-  _ListGroup.push_back(Group);
+  return _ListGroup;
 }
-//
-// Les frontieres
-//
-//=============================================================================
-const std::list<std::string>& HOMARD_Cas::GetBoundaryGroup() const
 //=============================================================================
+void HOMARD_Cas::SupprGroups()
 {
-  return _ListBoundaryGroup;
+  _ListGroup.clear();
 }
+//
+// Les frontieres
+//
 //=============================================================================
 void HOMARD_Cas::AddBoundaryGroup( const char* Boundary, const char* Group )
 {
+//  MESSAGE ( ". AddBoundaryGroup : Boundary = " << Boundary );
+//   MESSAGE ( ". AddBoundaryGroup : Group = " << Group );
   _ListBoundaryGroup.push_back( Boundary );
   _ListBoundaryGroup.push_back( Group    );
 }
 //=============================================================================
-void HOMARD_Cas::SupprBoundaryGroup()
+const std::list<std::string>& HOMARD_Cas::GetBoundaryGroup() const
+{
+  return _ListBoundaryGroup;
+}
 //=============================================================================
+void HOMARD_Cas::SupprBoundaryGroup()
 {
   _ListBoundaryGroup.clear();
 }
 //=============================================================================
 void HOMARD_Cas::SetPyram( int Pyram )
-//=============================================================================
 {
-  MESSAGE ("SetPyram, Pyram = " << Pyram );
   _Pyram = Pyram;
 }
 //=============================================================================
 const int HOMARD_Cas::GetPyram() const
-//=============================================================================
 {
-  MESSAGE ("GetPyram, Pyram = " << _Pyram );
   return _Pyram;
 }
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+std::string HOMARD_Cas::GetIter0Name() const
+{
+// Par construction de la liste, l'iteration a ete mise en tete.
+  return (*(_ListIter.begin()));
+}
+//=============================================================================
+void HOMARD_Cas::AddIteration( const char* NomIteration )
+{
+  _ListIter.push_back( std::string( NomIteration ) );
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Cas::GetIterations() const
+{
+  return _ListIter;
+}
+//=============================================================================
+void HOMARD_Cas::SupprIterations()
+{
+  _ListIter.clear();
+}
+
+
index 30dda0777976a62de9b1cf6ab7681e26a72dbed6..f478539a36d54347413639855ebd9bcea8ec34b6 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Cas.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #ifndef _HOMARD_CAS_HXX_
 #define _HOMARD_CAS_HXX_
 
+#include "HOMARD.hxx"
+
 #include <string>
 #include <list>
 #include <vector>
 
-class HOMARD_Cas
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+class HOMARDIMPL_EXPORT HOMARD_Cas
 {
 public:
   HOMARD_Cas();
   ~HOMARD_Cas();
 
-  void                          SetName( const char* NomCas );
+// Generalites
+  void                          SetName( const char* Name );
   std::string                   GetName() const;
 
-  void                          SetDirName( const char* NomDir );
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  int                           SetDirName( const char* NomDir );
   std::string                   GetDirName() const;
 
+  int                           GetNumberofIter();
+
   void                          SetConfType( int ConfType );
   const int                     GetConfType() const;
-  int                           GetNumber();
-
-  void                          AddIteration( const char* NomIteration );
-  const std::list<std::string>& GetIterations() const;
-  void                          SupprIterations();
 
-  std::string                   GetIter0Name() const;
-  std::string                   GetDumpPython() const;
+  void                          SetExtType( int ExtType );
+  const int                     GetExtType() const;
 
   void                          SetBoundingBox( const std::vector<double>& extremas );
   const std::vector<double>&    GetBoundingBox() const;
 
-  void                          SetGroups( const std::list<std::string>& ListGroup );
-
   void                          AddGroup( const char* Group);
+  void                          SetGroups( const std::list<std::string>& ListGroup );
   const std::list<std::string>& GetGroups() const;
   void                          SupprGroups();
 
-//   void                          SetBoundary( const std::list<std::string>& ListBoundary );
-
   void                          AddBoundaryGroup( const char* Boundary, const char* Group );
   const std::list<std::string>& GetBoundaryGroup() const;
   void                          SupprBoundaryGroup();
@@ -70,10 +83,19 @@ public:
   void                          SetPyram( int Pyram );
   const int                     GetPyram() const;
 
+// Liens avec les autres structures
+  std::string                   GetIter0Name() const;
+
+  void                          AddIteration( const char* NomIteration );
+  const std::list<std::string>& GetIterations() const;
+  void                          SupprIterations();
+
 private:
-  std::string                   _NomCas;
+  std::string                   _Name;
   std::string                   _NomDir;
   int                           _ConfType;
+  int                           _ExtType;
+  int                           _Etat;
 
   std::vector<double>           _Boite;         // cf HomardQTCommun pour structure du vecteur
   std::list<std::string>        _ListGroup;
index ccd5429f7ae60cb2556152138cc844ff034f343a..72697d940b8257c2e359740b4dc43a270f8af2e5 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -27,6 +27,7 @@
 #include "HOMARD_Hypothesis.hxx"
 #include "HOMARD_Iteration.hxx"
 #include "HOMARD_Zone.hxx"
+#include "HOMARD_YACS.hxx"
 #include <sstream>
 #include <cstdlib>
 #include "utilities.h"
@@ -34,7 +35,7 @@
 namespace HOMARD
 {
 
-  const char* const SEPARATOR = "|";
+  std::string SEPARATOR = "|" ;
 
   /*!
     \brief Read next chunk of data from the string
@@ -78,6 +79,7 @@ namespace HOMARD
     case Hypothesis: signature = "HYPO"; break;
     case Iteration:  signature = "ITER"; break;
     case Boundary:   signature = "BOUNDARY"; break;
+    case YACS:       signature = "YACS"; break;
     default: break;
     }
     signature += separator();
@@ -90,11 +92,11 @@ namespace HOMARD
   */
   std::string separator()
   {
-    return std::string( SEPARATOR );
+    return SEPARATOR ;
   }
 
 // =======================
-// Case
+// 1.1. Case
 // =======================
   /*!
     \brief Dump case to the string
@@ -104,11 +106,13 @@ namespace HOMARD
   std::string Dump( const HOMARD_Cas& cas )
   {
     std::stringstream os;
+    std::string saux ;
     // ...
-    MESSAGE( ". Dump du cas "<<cas.GetName());
+    MESSAGE( ". Sauvegarde du cas "<<cas.GetName());
     os << cas.GetName();
     os << separator() << cas.GetDirName();
     os << separator() << cas.GetConfType();
+    os << separator() << cas.GetExtType();
 
     std::vector<double> coor = cas.GetBoundingBox();
     os << separator() << coor.size();
@@ -132,12 +136,14 @@ namespace HOMARD
 
     os << separator() << cas.GetPyram();
 
-//    MESSAGE( ". Fin avec "<<os.str());
-    return os.str();
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
   }
 //
-// Iteration
-// ==========
+// ==============
+// 1.2. Iteration
+// ==============
 //
   /*!
     \brief Dump iteration to the string
@@ -147,18 +153,19 @@ namespace HOMARD
   std::string Dump( const HOMARD_Iteration& iteration )
   {
     std::stringstream os;
+    std::string saux ;
     // ...
-    MESSAGE( ". Dump de l'iteration "<<iteration.GetName());
+    MESSAGE( ". Sauvegarde de l'iteration "<<iteration.GetName());
     os << iteration.GetName();
-    os << separator() << iteration.GetEtat();
+    os << separator() << iteration.GetState();
     os << separator() << iteration.GetNumber();
     os << separator() << iteration.GetMeshFile();
-    os << separator() << iteration.GetMessFile();
+    os << separator() << iteration.GetLogFile();
     os << separator() << iteration.GetMeshName();
     os << separator() << iteration.GetFieldFile();
     os << separator() << iteration.GetTimeStep();
     os << separator() << iteration.GetRank();
-    os << separator() << iteration.GetIterParent();
+    os << separator() << iteration.GetIterParentName();
     //
     std::list<std::string> ListString = iteration.GetIterations();
     os << separator() << ListString.size();
@@ -168,14 +175,16 @@ namespace HOMARD
 
     os << separator() << iteration.GetHypoName();
     os << separator() << iteration.GetCaseName();
-    os << separator() << iteration.GetDirName();
+    os << separator() << iteration.GetDirNameLoc();
 
-//    MESSAGE( ". Fin avec "<<os.str());
-    return os.str();
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
   }
 //
-// hypothese
-// ==============================
+// ==============
+// 1.3. hypothese
+// ==============
   /*!
     \brief Dump hypothesis to the string
     \param hypothesis hypothesis being dumped
@@ -184,8 +193,9 @@ namespace HOMARD
   std::string Dump( const HOMARD_Hypothesis& hypothesis )
   {
     std::stringstream os;
+    std::string saux ;
     // ...
-    MESSAGE( ". Dump de l'hypothese "<<hypothesis.GetName());
+    MESSAGE( ". Sauvegarde de l'hypothese "<<hypothesis.GetName());
     os << hypothesis.GetName();
     os << separator() << hypothesis.GetCaseCreation();
     os << separator() << hypothesis.GetAdapType();
@@ -197,7 +207,7 @@ namespace HOMARD
     os << separator() << hypothesis.GetUnRefThrType();
     os << separator() << hypothesis.GetThreshC();
     os << separator() << hypothesis.GetUseField();
-    os << separator() << hypothesis.GetUseCompI();
+    os << separator() << hypothesis.GetUseComp();
     os << separator() << hypothesis.GetTypeFieldInterp();
 
     std::list<std::string> ListString = hypothesis.GetIterations();
@@ -211,7 +221,7 @@ namespace HOMARD
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
-    ListString = hypothesis.GetListComp();
+    ListString = hypothesis.GetComps();
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
          os << separator() << *it;
@@ -221,20 +231,24 @@ namespace HOMARD
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
-    ListString = hypothesis.GetListFieldInterp();
+    ListString = hypothesis.GetFieldInterps();
     os << separator() << ListString.size();
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
     os << separator() << hypothesis.GetNivMax();
     os << separator() << hypothesis.GetDiamMin();
+    os << separator() << hypothesis.GetAdapInit();
+    os << separator() << hypothesis.GetExtraOutput();
 
-//    MESSAGE( ". Fin avec "<<os.str());
-    return os.str();
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
   }
 //
-// Zone
-// =========================
+// =========
+// 1.4. Zone
+// =========
 
   /*!
     \brief Dump zone to the string
@@ -244,9 +258,10 @@ namespace HOMARD
   std::string Dump( const HOMARD_Zone& zone )
   {
     std::stringstream os;
-    MESSAGE( ". Dump de la zone "<<zone.GetName());
+    std::string saux ;
+    MESSAGE( ". Sauvegarde de la zone "<<zone.GetName());
     os << zone.GetName();
-    os << separator() << zone.GetZoneType();
+    os << separator() << zone.GetType();
 
     std::vector<double> coords = zone.GetCoords();
     for ( int i = 0; i < coords.size(); i++ )
@@ -262,10 +277,12 @@ namespace HOMARD
     for ( it = hypos.begin(); it != hypos.end(); ++it )
       os << separator() << *it;
 
-//    MESSAGE( ". Fin avec "<<os.str());
-    return os.str();
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
   }
 //
+// ==============================
 // 1.5. Archivage d'une frontiere
 // ==============================
 
@@ -277,9 +294,10 @@ namespace HOMARD
   std::string Dump( const HOMARD_Boundary& boundary )
   {
     std::stringstream os;
-    MESSAGE( ". Dump de la frontiere "<<boundary.GetName());
+    std::string saux ;
+    MESSAGE( ". Sauvegarde de la frontiere "<<boundary.GetName());
 
-    int BoundaryType = boundary.GetBoundaryType() ;
+    int BoundaryType = boundary.GetType() ;
 
     os << boundary.GetName() ;
     os << separator() << BoundaryType ;
@@ -305,14 +323,37 @@ namespace HOMARD
     for ( it = ListString.begin(); it != ListString.end(); ++it )
           os << separator() << *it;
 
-//    MESSAGE( ". Fin avec "<<os.str());
-    return os.str();
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
   }
 
 //
-// Restauration des objets
+// =========
+// 1.6. YACS
+// =========
+
+  /*!
+    \brief Dump YACS to the string
+    \param yacs yacs being dumped
+    \return string representation of the zone
+  */
+  std::string Dump( const HOMARD_YACS& yacs )
+  {
+    std::stringstream os;
+    std::string saux ;
+    MESSAGE( ". Sauvegarde du schema YACS "<<yacs.GetName());
+    os << yacs.GetName();
+    os << separator() << yacs.GetType();
+
+    saux = os.str();
+//     MESSAGE( ". Fin avec "<<saux);
+    return saux ;
+  }
+//
+// 2. Restauration des objets
 // ==========================
-// Case
+// 2.1. Case
 // ==========================
 //
   /*!
@@ -340,6 +381,10 @@ namespace HOMARD
     if ( !ok ) return false;
     cas.SetConfType( atoi( chunk.c_str() ) );
 
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    cas.SetExtType( atoi( chunk.c_str() ) );
+
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
 
@@ -392,8 +437,9 @@ namespace HOMARD
     return true;
   }
 //
-//  Iteration
-// =================================
+// ==============
+// 2.2. Iteration
+// ==============
   /*!
     \brief Restore iteration from the string
     \param iteration iteration being restored
@@ -411,7 +457,7 @@ namespace HOMARD
     iteration.SetName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetEtat( (bool)atoi( chunk.c_str() ) );
+    iteration.SetState( atoi( chunk.c_str() ) );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetNumber( atoi( chunk.c_str() ) );
@@ -420,7 +466,7 @@ namespace HOMARD
     iteration.SetMeshFile( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetMessFile( chunk.c_str() );
+    iteration.SetLogFile( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     iteration.SetMeshName( chunk.c_str() );
@@ -438,7 +484,7 @@ namespace HOMARD
     iteration.SetTimeStepRank( timestep, rank );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetIterParent( chunk.c_str() );
+    iteration.SetIterParentName( chunk.c_str() );
     //
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
@@ -446,7 +492,7 @@ namespace HOMARD
     for ( int i = 0; i < size; i++ ) {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
-      iteration.AddIteration( chunk.c_str() );
+      iteration.LinkNextIteration( chunk.c_str() );
     }
     //
     chunk = getNextChunk( stream, start, ok );
@@ -457,13 +503,14 @@ namespace HOMARD
     iteration.SetCaseName( chunk.c_str() );
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
-    iteration.SetDirName( chunk.c_str() );
+    iteration.SetDirNameLoc( chunk.c_str() );
     return true;
   }
 
 //
-// hypothese
-// =================================
+// ==============
+// 2.3. hypothese
+// ==============
   /*!
     \brief Restore hypothesis from the string
     \param hypothesis hypothesis being restored
@@ -534,7 +581,7 @@ namespace HOMARD
     for ( int i = 0; i < size; i++ ) {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
-      hypothesis.AddIteration( chunk.c_str() );
+      hypothesis.LinkIteration( chunk.c_str() );
     }
 
     chunk = getNextChunk( stream, start, ok );
@@ -574,7 +621,11 @@ namespace HOMARD
     for ( int i = 0; i < size; i++ ) {
       chunk = getNextChunk( stream, start, ok );
       if ( !ok ) return false;
-      hypothesis.AddFieldInterp( chunk.c_str() );
+      i++;
+      chunkNext = getNextChunk( stream, start, ok );
+      int TypeInterp = atoi( chunkNext.c_str() );
+      if ( !ok ) return false;
+      hypothesis.AddFieldInterpType( chunk.c_str(), TypeInterp );
     }
 
     chunk = getNextChunk( stream, start, ok );
@@ -585,12 +636,21 @@ namespace HOMARD
     if ( !ok ) return false;
     hypothesis.SetDiamMin( strtod( chunk.c_str(), 0 ) );
 
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    hypothesis.SetAdapInit( strtod( chunk.c_str(), 0 ) );
+
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    hypothesis.SetExtraOutput( strtod( chunk.c_str(), 0 ) );
+
     return true;
   }
 
 //
-// Zone
-// ============================
+// =========
+// 2.4. Zone
+// =========
   /*!
     \brief Restore zone from the string
     \param zone zone being restored
@@ -610,14 +670,14 @@ namespace HOMARD
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     int ZoneType = atoi( chunk.c_str() ) ;
-    zone.SetZoneType( ZoneType );
+    zone.SetType( ZoneType );
     // Les coordonnees des zones : le nombre depend du type
     std::vector<double> coords;
     int lgcoords ;
-    if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) ) { lgcoords = 6 ; }
+    if ( ZoneType == 2 || ( ZoneType >= 11 && ZoneType <= 13 ) ) { lgcoords = 6 ; }
     else if ( ZoneType == 4 ) { lgcoords = 4 ; }
-    else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) ) { lgcoords = 8 ; }
-    else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) ) { lgcoords = 9 ; }
+    else if ( ZoneType == 5 || ( ZoneType >= 31 && ZoneType <= 33 ) ) { lgcoords = 8 ; }
+    else if ( ZoneType == 7 || ( ZoneType >= 61 && ZoneType <= 63 ) ) { lgcoords = 9 ; }
     else return false;
     coords.resize( lgcoords );
     for ( int i = 0; i < lgcoords; i++ ) {
@@ -625,13 +685,13 @@ namespace HOMARD
       if ( !ok ) return false;
       coords[i] = strtod( chunk.c_str(), 0 );
     }
-    if ( ZoneType == 2 or ( ZoneType >= 11 and ZoneType <= 13 ) )
+    if ( ZoneType == 2 || ( ZoneType >= 11 && ZoneType <= 13 ) )
     { zone.SetBox( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5] ); }
     else if ( ZoneType == 4 )
     { zone.SetSphere( coords[0], coords[1], coords[2], coords[3] ); }
-    else if ( ZoneType == 5 or ( ZoneType >= 31 and ZoneType <= 33 ) )
+    else if ( ZoneType == 5 || ( ZoneType >= 31 && ZoneType <= 33 ) )
     { zone.SetCylinder( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7] ); }
-    else if ( ZoneType == 7 or ( ZoneType >= 61 and ZoneType <= 63 ) )
+    else if ( ZoneType == 7 || ( ZoneType >= 61 && ZoneType <= 63 ) )
     { zone.SetPipe( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7], coords[8] ); }
     // Remarque : la taille de coords est suffisante pour les limites
     for ( int i = 0; i < 3; i++ ) {
@@ -653,6 +713,7 @@ namespace HOMARD
   }
 
 //
+// =================================
 // 2.5. Restauration d'une frontiere
 // =================================
 
@@ -660,7 +721,7 @@ namespace HOMARD
     \brief Restore boundary from the string
     \param boundary boundary being restored
     \param stream string representation of the boundary
-    \return \c true if zone is correctly restored or \c false otherwise
+    \return \c true if the boundary is correctly restored or \c false otherwise
   */
   bool Restore( HOMARD_Boundary& boundary, const std::string& stream )
   {
@@ -675,7 +736,7 @@ namespace HOMARD
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
     int BoundaryType = atoi( chunk.c_str() ) ;
-    boundary.SetBoundaryType( BoundaryType );
+    boundary.SetType( BoundaryType );
 
     chunk = getNextChunk( stream, start, ok );
     if ( !ok ) return false;
@@ -710,6 +771,10 @@ namespace HOMARD
       { boundary.SetCylinder(coords[0],coords[1],coords[2],coords[3],coords[4],coords[5],coords[6]); }
       else if ( BoundaryType == 2 )
       { boundary.SetSphere( coords[0], coords[1], coords[2], coords[3]); }
+      else if ( BoundaryType == 3 )
+      { boundary.SetConeA( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6]); }
+      else if ( BoundaryType == 4 )
+      { boundary.SetConeR( coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], coords[6], coords[7]); }
       // Remarque : la taille de coords est suffisante pour les limites
       for ( int i = 0; i < 3; i++ ) {
         chunk = getNextChunk( stream, start, ok );
@@ -731,4 +796,33 @@ namespace HOMARD
     return true;
   }
 
+//
+// ==================================
+// 2.6. Restauration d'un schema YACS
+// ==================================
+
+  /*!
+    \brief Restore a schema YACS from the string
+    \param yacs yacs being restored
+    \param stream string representation of the schema yacs
+    \return \c true if yacs is correctly restored or \c false otherwise
+  */
+  bool Restore( HOMARD_YACS& yacs, const std::string& stream )
+  {
+    std::string::size_type start = 0;
+    std::string chunk;
+    bool ok;
+
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    yacs.SetName( chunk.c_str() );
+
+    chunk = getNextChunk( stream, start, ok );
+    if ( !ok ) return false;
+    int YACSType = atoi( chunk.c_str() ) ;
+    yacs.SetType( YACSType );
+
+    return true;
+  }
+
 } // namespace HOMARD /end/
index 9ddd76d888b8672c4af6495bce0c1d21536ed425..457836dc5e20485894eaf102fb3a2af9bbd6b91a 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -24,6 +24,8 @@
 #ifndef HOMARD_DRIVERTOOLS_H
 #define HOMARD_DRIVERTOOLS_H
 
+#include "HOMARD.hxx"
+
 #include <string>
 
 class HOMARD_Boundary;
@@ -31,39 +33,44 @@ class HOMARD_Cas;
 class HOMARD_Iteration;
 class HOMARD_Hypothesis;
 class HOMARD_Zone;
+class HOMARD_YACS;
 
 namespace HOMARD
 {
   //! persistence entity type
-  typedef enum { Case, Zone, Hypothesis, Iteration, Boundary } SignatureType;
+  typedef enum { Case, Zone, Hypothesis, Iteration, Boundary, YACS } SignatureType;
 
   //! get persistence signature
-  std::string GetSignature( SignatureType type );
-  
+  HOMARDIMPL_EXPORT std::string GetSignature( SignatureType type );
+
   //! get data separator
-  std::string separator();
+  HOMARDIMPL_EXPORT std::string separator();
 
   //! dump boundary to the string
-  std::string Dump( const ::HOMARD_Boundary& boundary );
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_Boundary& boundary );
   //! dump case to the string
-  std::string Dump( const ::HOMARD_Cas& cas );
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_Cas& cas );
   //! dump iteration to the string
-  std::string Dump( const ::HOMARD_Iteration& iteration );
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_Iteration& iteration );
   //! dump hypothesis to the string
-  std::string Dump( const ::HOMARD_Hypothesis& hypothesis );
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_Hypothesis& hypothesis );
   //! dump zone to the string
-  std::string Dump( const ::HOMARD_Zone& zone );
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_Zone& zone );
+  //! dump yacs to the string
+  HOMARDIMPL_EXPORT std::string Dump( const ::HOMARD_YACS& yacs );
 
   //! restore boundary from the string
-  bool Restore( ::HOMARD_Boundary& boundary, const std::string& stream );
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_Boundary& boundary, const std::string& stream );
   //! restore case from the string
-  bool Restore( ::HOMARD_Cas& cas, const std::string& stream );
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_Cas& cas, const std::string& stream );
   //! restore hypothesis from the string
-  bool Restore( ::HOMARD_Hypothesis& hypothesis, const std::string& stream );
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_Hypothesis& hypothesis, const std::string& stream );
   //! restore iteration from the string
-  bool Restore( ::HOMARD_Iteration& iteration, const std::string& stream );
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_Iteration& iteration, const std::string& stream );
   //! restore zone from the string
-  bool Restore( ::HOMARD_Zone& zone, const std::string& stream );
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_Zone& zone, const std::string& stream );
+  //! restore yacs from the string
+  HOMARDIMPL_EXPORT bool Restore( ::HOMARD_YACS& yacs, const std::string& stream );
 };
 
 #endif // HOMARD_DRIVERTOOLS_H
index 7b140e706a2900f406c3b01a5962b8c4175039c6..57cda351a7701d4907aec6ded5de9c7e14dea7c1 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,7 +19,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Gen.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
 
 #include "HOMARD_Gen.hxx"
index f82c805e564b119a431120d6ad5ce8355a79b49a..f67656f1078454e46a8adf3923131e441e48dd27 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Gen.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
 
 #ifndef _HOMARD_GEN_HXX_
 #define _HOMARD_GEN_HXX_
 
-class HOMARD_Gen
+#include "HOMARD.hxx"
+
+class HOMARDIMPL_EXPORT HOMARD_Gen
 {
 public :
   HOMARD_Gen();
index 40874c5350f3002cc234c297210ecdc1702c9ae6..2c647d8a1e05bfa18b8f560d80001d1ab581a44d 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Hypothesis.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #include "HOMARD_Hypothesis.hxx"
+#include "HOMARD.hxx"
 #include "utilities.h"
 
 //=============================================================================
@@ -31,7 +41,7 @@
  */
 //=============================================================================
 HOMARD_Hypothesis::HOMARD_Hypothesis():
-  _NomHypo(""), _NomCasCreation(""),
+  _Name(""), _NomCasCreation(""),
   _TypeAdap(-1), _TypeRaff(0), _TypeDera(0),
   _Field(""),
   _TypeThR(0), _ThreshR(0),
@@ -49,55 +59,40 @@ HOMARD_Hypothesis::~HOMARD_Hypothesis()
 {
   MESSAGE("~HOMARD_Hypothesis");
 }
-
 //=============================================================================
-/*!
- */
-//=============================================================================
-void HOMARD_Hypothesis::SetCaseCreation( const char* NomCasCreation )
-{
-  _NomCasCreation = std::string( NomCasCreation );
-}
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
-std::string HOMARD_Hypothesis::GetCaseCreation() const
-{
-  return _NomCasCreation;
-}
+// Generalites
 //=============================================================================
-/*!
-*/
 //=============================================================================
-void HOMARD_Hypothesis::SetName( const char* NomHypo )
+void HOMARD_Hypothesis::SetName( const char* Name )
 {
-  _NomHypo = std::string( NomHypo );
+  _Name = std::string( Name );
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 std::string HOMARD_Hypothesis::GetName() const
 {
-  return _NomHypo;
+  return _Name;
 }
 //=============================================================================
 std::string HOMARD_Hypothesis::GetDumpPython() const
 {
   std::ostringstream aScript;
-  aScript << "\n# Creation of the hypothesis " << _NomHypo << "\n" ;
-  aScript << "\t" << _NomHypo << " = homard.CreateHypothesis(\"" << _NomHypo << "\")\n";
-  aScript << "\t" << _NomHypo << ".SetAdapRefinUnRef(" << _TypeAdap << ", " << _TypeRaff << ", " << _TypeDera << ")\n";
+  aScript << "\n# Creation of the hypothesis " << _Name << "\n" ;
+  aScript << "\t" << _Name << " = homard.CreateHypothesis(\"" << _Name << "\")\n";
+  if ( _TypeAdap == -1 )
+  {
+    int TypeRaffDera ;
+    if ( _TypeRaff == 1 ) { TypeRaffDera = 1 ; }
+    else                  { TypeRaffDera = -1 ; }
+    aScript << "\t" << _Name << ".SetUnifRefinUnRef(" << TypeRaffDera << ")\n";
+  }
 
 // Raffinement selon des zones geometriques
   std::list<std::string>::const_iterator it = _ListZone.begin();
   int TypeUse ;
   while(it != _ListZone.end())
   {
-      aScript << "\thomard.AssociateHypoZone(\""<< _NomHypo << "\", \"" << *it;
+      aScript << "\t" << _Name << ".AddZone(\"" << *it;
       it++;
       if ( *it == "1" ) { TypeUse =  1 ; }
       else              { TypeUse = -1 ; }
@@ -108,114 +103,97 @@ std::string HOMARD_Hypothesis::GetDumpPython() const
 // Raffinement selon un champ
   if ( _TypeAdap == 1 )
   {
-    aScript << "\t" << _NomHypo << ".SetField(\"" << _Field << "\")\n";
-    aScript << "\t" << _NomHypo << ".SetUseField(" << _UsField << ")\n";
-    aScript << "\t" << _NomHypo << ".SetUseComp(" << _UsCmpI << ")\n";
-    std::list<std::string>::const_iterator it_comp = _ListComposant.begin();
-    while(it_comp != _ListComposant.end())
+    aScript << "\t" << _Name << ".SetField(\"" << _Field << "\")\n";
+    aScript << "\t" << _Name << ".SetUseField(" << _UsField << ")\n";
+    aScript << "\t" << _Name << ".SetUseComp(" << _UsCmpI << ")\n";
+    std::list<std::string>::const_iterator it_comp = _ListComp.begin();
+    while(it_comp != _ListComp.end())
     {
-      aScript << "\t" << _NomHypo << ".AddComp(\"" << *it_comp << "\")\n";
+      aScript << "\t" << _Name << ".AddComp(\"" << *it_comp << "\")\n";
       it_comp++;
     }
     if ( _TypeRaff == 1 )
     {
-      aScript << "\t" << _NomHypo << ".SetRefinThr(" << _TypeThR;
-      aScript << ", " << _ThreshR << ")\n";
+      aScript << "\t" << _Name << ".SetRefinThr(" << _TypeThR << ", " << _ThreshR << ")\n";
     }
     if ( _TypeDera == 1 )
     {
-      aScript << "\t" << _NomHypo << ".SetUnRefThr(" << _TypeThC;
-      aScript << ", " << _ThreshC << ")\n";
+      aScript << "\t" << _Name << ".SetUnRefThr(" << _TypeThC << ", " << _ThreshC << ")\n";
     }
   }
 
 // Filtrage du raffinement par des groupes
    for ( it=_ListGroupSelected.begin(); it!=_ListGroupSelected.end();it++)
-       aScript << "\t" << _NomHypo << ".AddGroup(\""  << (*it) <<  "\")\n" ;
+       aScript << "\t" << _Name << ".AddGroup(\""  << (*it) <<  "\")\n" ;
 
-// Interpolation champ
-  aScript << "\t" << _NomHypo << ".SetTypeFieldInterp(" << _TypeFieldInterp << ")\n";
+// Interpolation des champs
   if ( _TypeFieldInterp == 2 )
   {
     std::list<std::string>::const_iterator it_champ = _ListFieldInterp.begin();
     while(it_champ != _ListFieldInterp.end())
     {
-      aScript << "\t" << _NomHypo << ".AddFieldInterp(\"" << *it_champ << "\")\n";
+      aScript << "\t" << _Name << ".AddFieldInterpType( \"" << *it_champ  <<  "\" " ;
+      it_champ++;
+      aScript << ", " << *it_champ << ")\n";
       it_champ++;
     }
   }
+  else if ( _TypeFieldInterp != 0 )
+  {
+    aScript << "\t" << _Name << ".SetTypeFieldInterp(" << _TypeFieldInterp << ")\n";
+  }
   if ( _NivMax > 0 )
   {
-    aScript << "\tNivMax = " << _NivMax << "\n";
-    aScript << "\t" <<_NomHypo << ".SetNivMax(NivMax)\n";
+    aScript << "\t" <<_Name << ".SetNivMax(" << _NivMax << ")\n";
   }
   if ( _DiamMin > 0 )
   {
-    aScript << "\tDiamMin = " << _DiamMin << "\n";
-    aScript << "\t" <<_NomHypo << ".SetDiamMin(DiamMin)\n";
+    aScript << "\t" <<_Name << ".SetDiamMin(" << _DiamMin << ")\n";
   }
   if ( _AdapInit != 0 )
   {
-    aScript << "\tAdapInit = " << _AdapInit << "\n";
-    aScript << "\t" <<_NomHypo << ".SetAdapInit(AdapInit)\n";
+    aScript << "\t" <<_Name << ".SetAdapInit(" << _AdapInit << ")\n";
+  }
+  if ( _ExtraOutput != 1 )
+  {
+    aScript << "\t" <<_Name << ".SetExtraOutput(" << _ExtraOutput << ")\n";
   }
 
   return aScript.str();
 }
-
-
 //=============================================================================
-/*!
-*/
+//=============================================================================
+// Caracteristiques
+//=============================================================================
 //=============================================================================
 void HOMARD_Hypothesis::SetAdapType( int TypeAdap )
 {
-  ASSERT (!((TypeAdap < -1) or (TypeAdap > 1)));
+  VERIFICATION( (TypeAdap>=-1) && (TypeAdap<=1) );
   _TypeAdap = TypeAdap;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 int HOMARD_Hypothesis::GetAdapType() const
 {
   return _TypeAdap;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 void HOMARD_Hypothesis::SetRefinTypeDera( int TypeRaff, int TypeDera )
 {
-  ASSERT(!(( TypeRaff < 0) or (TypeRaff > 1)));
+  VERIFICATION( (TypeRaff>=-1) && (TypeRaff<=1) );
   _TypeRaff = TypeRaff;
-  ASSERT(! ((TypeDera < 0) or (TypeDera > 1)));
+  VERIFICATION( (TypeDera>=-1) && (TypeDera<=1) );
   _TypeDera = TypeDera;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 int HOMARD_Hypothesis::GetRefinType() const
 {
   return _TypeRaff;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 int HOMARD_Hypothesis::GetUnRefType() const
 {
   return _TypeDera;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 void HOMARD_Hypothesis::SetField( const char* FieldName )
 {
@@ -223,40 +201,67 @@ void HOMARD_Hypothesis::SetField( const char* FieldName )
   MESSAGE( "SetField : FieldName = " << FieldName );
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetRefinThr( int TypeThR, double ThreshR )
+std::string HOMARD_Hypothesis::GetFieldName() const
 {
-  MESSAGE( "SetRefinThr : TypeThR = " << TypeThR << ", ThreshR = " << ThreshR );
-  ASSERT(!(( TypeThR < 0) or (TypeThR > 3 )));
-  _TypeThR = TypeThR;
-  _ThreshR = ThreshR;
+  return _Field;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetUnRefThr( int TypeThC, double ThreshC )
+void HOMARD_Hypothesis::SetUseField( int UsField )
 {
-  ASSERT(!((TypeThC < 0) or (TypeThC > 3)));
-  _TypeThC = TypeThC;
-  _ThreshC = ThreshC;
+  VERIFICATION( (UsField>=0) && (UsField<=1) );
+  _UsField = UsField;
+}
+//=============================================================================
+int HOMARD_Hypothesis::GetUseField() const
+{
+  return _UsField;
 }
 //=============================================================================
 void HOMARD_Hypothesis::SetUseComp( int UsCmpI )
 {
-  ASSERT(!((UsCmpI < 0) or (UsCmpI > 2)));
+  MESSAGE ("SetUseComp pour UsCmpI = "<<UsCmpI) ;
+  VERIFICATION( (UsCmpI>=0) && (UsCmpI<=2) );
   _UsCmpI = UsCmpI;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetUseField( int UsField )
+int HOMARD_Hypothesis::GetUseComp() const
 {
-  ASSERT(!((UsField < 0) or (UsField > 1 )));
-  _UsField = UsField;
+  return _UsCmpI;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Hypothesis::AddComp( const char* NomComp )
+{
+// On commence par supprimer la composante au cas ou elle aurait deja ete inseree
+// Cela peut se produire dans un schema YACS quand on repasse plusieurs fois par la
+// definition de l'hypothese
+  SupprComp( NomComp ) ;
+// Insertion veritable
+  _ListComp.push_back( std::string( NomComp ) );
+}
 //=============================================================================
-std::string HOMARD_Hypothesis::GetFieldName() const
+void HOMARD_Hypothesis::SupprComp( const char* NomComp )
 {
-  return _Field;
+  MESSAGE ("SupprComp pour "<<NomComp) ;
+  std::list<std::string>::iterator it = find( _ListComp.begin(), _ListComp.end(), NomComp );
+  if ( it != _ListComp.end() ) { it = _ListComp.erase( it ); }
+}
+//=============================================================================
+void HOMARD_Hypothesis::SupprComps()
+{
+  _ListComp.clear();
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Hypothesis::GetComps() const
+{
+  return _ListComp;
+}
+//=============================================================================
+void HOMARD_Hypothesis::SetRefinThr( int TypeThR, double ThreshR )
+{
+  MESSAGE( "SetRefinThr : TypeThR = " << TypeThR << ", ThreshR = " << ThreshR );
+  VERIFICATION( (TypeThR>=0) && (TypeThR<=4) );
+  _TypeThR = TypeThR;
+  _ThreshR = ThreshR;
 }
 //=============================================================================
 int HOMARD_Hypothesis::GetRefinThrType() const
@@ -269,101 +274,91 @@ double HOMARD_Hypothesis::GetThreshR() const
   return _ThreshR;
 }
 //=============================================================================
+void HOMARD_Hypothesis::SetUnRefThr( int TypeThC, double ThreshC )
+{
+  VERIFICATION( (TypeThC>=0) && (TypeThC<=4) );
+  _TypeThC = TypeThC;
+  _ThreshC = ThreshC;
+}
+//=============================================================================
 int HOMARD_Hypothesis::GetUnRefThrType() const
 {
   return _TypeThC;
 }
-
 //=============================================================================
 double HOMARD_Hypothesis::GetThreshC() const
 {
   return _ThreshC;
 }
 //=============================================================================
-int HOMARD_Hypothesis::GetUseField() const
-{
-  return _UsField;
-}
+void HOMARD_Hypothesis::SetNivMax( int NivMax )
 //=============================================================================
-int HOMARD_Hypothesis::GetUseCompI() const
 {
-  return _UsCmpI;
+  _NivMax = NivMax;
 }
 //=============================================================================
-/*!
-*/
+const int HOMARD_Hypothesis::GetNivMax() const
 //=============================================================================
-void HOMARD_Hypothesis::AddIteration( const char* NomIteration )
 {
-  _ListIter.push_back( std::string( NomIteration ) );
+  return _NivMax;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SupprIterations()
-{
-  _ListIter.clear();
-}
+void HOMARD_Hypothesis::SetDiamMin( double DiamMin )
 //=============================================================================
-const std::list<std::string>& HOMARD_Hypothesis::GetIterations() const
 {
-  return _ListIter;
+  _DiamMin = DiamMin;
 }
 //=============================================================================
-/*!
-*/
+const double HOMARD_Hypothesis::GetDiamMin() const
 //=============================================================================
-void HOMARD_Hypothesis::AddZone( const char* NomZone, int TypeUse )
 {
-  _ListZone.push_back( std::string( NomZone ) );
-  std::stringstream saux1 ;
-  saux1 << TypeUse ;
-  std::string saux2 = saux1.str() ;
-  _ListZone.push_back( saux2 );
+  return _DiamMin;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SupprZone( const char* NomZone )
+void HOMARD_Hypothesis::SetAdapInit( int AdapInit )
+//=============================================================================
 {
-  std::list<std::string>::iterator it = find( _ListZone.begin(), _ListZone.end(), NomZone );
-  if ( it != _ListZone.end() )
-  {
-    _ListZone.erase( it );
-  }
+  _AdapInit = AdapInit;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SupprZones()
+const int HOMARD_Hypothesis::GetAdapInit() const
+//=============================================================================
 {
-  _ListZone.clear();
+  return _AdapInit;
 }
 //=============================================================================
-const std::list<std::string>& HOMARD_Hypothesis::GetZones() const
+void HOMARD_Hypothesis::SetExtraOutput( int ExtraOutput )
+//=============================================================================
 {
-  return _ListZone;
+  _ExtraOutput = ExtraOutput;
 }
 //=============================================================================
-/*!
-*/
+const int HOMARD_Hypothesis::GetExtraOutput() const
 //=============================================================================
-void HOMARD_Hypothesis::AddComp( const char* NomComposant )
 {
-  _ListComposant.push_back( std::string( NomComposant ) );
+  return _ExtraOutput;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SupprComp()
+void HOMARD_Hypothesis::AddGroup( const char* Group)
 {
-  std::cerr << "HOMARD_Hypothesis::SupprComp" << std::endl;
-  _ListComposant.clear();
+// On commence par supprimer le groupe au cas ou il aurait deja ete insere
+// Cela peut se produire dans un schema YACS quand on repasse plusieurs fois par la
+// definition de l'hypothese
+  SupprGroup( Group ) ;
+// Insertion veritable
+  _ListGroupSelected.push_back(Group);
 }
 //=============================================================================
-const std::list<std::string>& HOMARD_Hypothesis::GetListComp() const
+void HOMARD_Hypothesis::SupprGroup( const char* Group )
 {
-  return _ListComposant;
+  MESSAGE ("SupprGroup pour "<<Group) ;
+  std::list<std::string>::iterator it = find( _ListGroupSelected.begin(), _ListGroupSelected.end(), Group );
+  if ( it != _ListGroupSelected.end() ) { it = _ListGroupSelected.erase( it ); }
 }
 //=============================================================================
-/*!
-*/
-//=============================================================================
-const std::list<std::string>& HOMARD_Hypothesis::GetGroups() const
+void HOMARD_Hypothesis::SupprGroups()
 {
-  return _ListGroupSelected;
+  _ListGroupSelected.clear();
 }
 //=============================================================================
 void HOMARD_Hypothesis::SetGroups( const std::list<std::string>& ListGroup )
@@ -374,79 +369,156 @@ void HOMARD_Hypothesis::SetGroups( const std::list<std::string>& ListGroup )
     _ListGroupSelected.push_back((*it++));
 }
 //=============================================================================
-void HOMARD_Hypothesis::AddGroup( const char* Group)
+const std::list<std::string>& HOMARD_Hypothesis::GetGroups() const
 {
-  _ListGroupSelected.push_back(Group);
+  return _ListGroupSelected;
 }
 //=============================================================================
-/*!
-*/
-//=============================================================================
+// Type d'interpolation des champs :
+//   0 : aucun champ n'est interpole
+//   1 : tous les champs sont interpoles
+//   2 : certains champs sont interpoles
 void HOMARD_Hypothesis::SetTypeFieldInterp( int TypeFieldInterp )
 {
-  ASSERT (!((TypeFieldInterp < -1) or (TypeFieldInterp > 2)));
+  VERIFICATION( (TypeFieldInterp>=0) && (TypeFieldInterp<=2) );
   _TypeFieldInterp = TypeFieldInterp;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 int HOMARD_Hypothesis::GetTypeFieldInterp() const
 {
   return _TypeFieldInterp;
 }
-/*!
-*/
 //=============================================================================
-void HOMARD_Hypothesis::AddFieldInterp( const char* FieldInterp )
+void HOMARD_Hypothesis::AddFieldInterpType( const char* FieldInterp, int TypeInterp )
 {
+  MESSAGE ("Dans AddFieldInterpType pour " << FieldInterp << " et TypeInterp = " << TypeInterp) ;
+// On commence par supprimer le champ au cas ou il aurait deja ete insere
+// Cela peut se produire dans un schema YACS quand on repasse plusieurs fois par la
+// definition de l'hypothese
+  SupprFieldInterp( FieldInterp ) ;
+// Insertion veritable
+// . Nom du champ
   _ListFieldInterp.push_back( std::string( FieldInterp ) );
+// . Usage du champ
+  std::stringstream saux1 ;
+  saux1 << TypeInterp ;
+  _ListFieldInterp.push_back( saux1.str() );
+// . Indication generale : certains champs sont a interpoler
+  SetTypeFieldInterp ( 2 ) ;
+}
+//=============================================================================
+void HOMARD_Hypothesis::SupprFieldInterp( const char* FieldInterp )
+{
+  MESSAGE ("Dans SupprFieldInterp pour " << FieldInterp) ;
+  std::list<std::string>::iterator it = find( _ListFieldInterp.begin(), _ListFieldInterp.end(), FieldInterp ) ;
+// Attention a supprimer le nom du champ et le type d'usage
+  if ( it != _ListFieldInterp.end() )
+  {
+    it = _ListFieldInterp.erase( it ) ;
+    it = _ListFieldInterp.erase( it ) ;
+  }
+// Decompte du nombre de champs restant a interpoler
+  it = _ListFieldInterp.begin() ;
+  int cpt = 0 ;
+  while(it != _ListFieldInterp.end())
+  {
+    cpt += 1 ;
+    (*it++);
+  }
+  MESSAGE("Nombre de champ restants = "<<cpt/2);
+// . Indication generale : aucun champ ne reste a interpoler
+  if ( cpt == 0 )
+  {
+    SetTypeFieldInterp ( 0 ) ;
+  }
 }
 //=============================================================================
-void HOMARD_Hypothesis::SupprFieldInterp()
+void HOMARD_Hypothesis::SupprFieldInterps()
 {
-  std::cerr << "HOMARD_Hypothesis::SupprFieldInterpp" << std::endl;
+  MESSAGE ("SupprFieldInterps") ;
   _ListFieldInterp.clear();
+// . Indication generale : aucun champ ne reste a interpoler
+  SetTypeFieldInterp ( 0 ) ;
 }
 //=============================================================================
-const std::list<std::string>& HOMARD_Hypothesis::GetListFieldInterp() const
+const std::list<std::string>& HOMARD_Hypothesis::GetFieldInterps() const
 {
   return _ListFieldInterp;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetNivMax( int NivMax )
 //=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Hypothesis::SetCaseCreation( const char* NomCasCreation )
 {
-  _NivMax = NivMax;
+  _NomCasCreation = std::string( NomCasCreation );
 }
 //=============================================================================
-const int HOMARD_Hypothesis::GetNivMax() const
-//=============================================================================
+std::string HOMARD_Hypothesis::GetCaseCreation() const
 {
-  return _NivMax;
+  return _NomCasCreation;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetAdapInit( int AdapInit )
+void HOMARD_Hypothesis::LinkIteration( const char* NomIteration )
+{
+  _ListIter.push_back( std::string( NomIteration ) );
+}
 //=============================================================================
+void HOMARD_Hypothesis::UnLinkIteration( const char* NomIteration )
 {
-  _AdapInit = AdapInit;
+  std::list<std::string>::iterator it = find( _ListIter.begin(), _ListIter.end(), NomIteration ) ;
+  if ( it != _ListIter.end() )
+  {
+    MESSAGE ("Dans UnLinkIteration pour " << NomIteration) ;
+    it = _ListIter.erase( it ) ;
+  }
 }
 //=============================================================================
-const int HOMARD_Hypothesis::GetAdapInit() const
+void HOMARD_Hypothesis::UnLinkIterations()
+{
+  _ListIter.clear();
+}
 //=============================================================================
+const std::list<std::string>& HOMARD_Hypothesis::GetIterations() const
 {
-  return _AdapInit;
+  return _ListIter;
 }
 //=============================================================================
-void HOMARD_Hypothesis::SetDiamMin( double DiamMin )
+void HOMARD_Hypothesis::AddZone( const char* NomZone, int TypeUse )
+{
+  MESSAGE ("Dans AddZone pour " << NomZone << " et TypeUse = " << TypeUse) ;
+// On commence par supprimer la zone au cas ou elle aurait deja ete inseree
+// Cela peut se produire dans un schema YACS quand on repasse plusieurs fois par la
+// definition de l'hypothese
+  SupprZone( NomZone ) ;
+// Insertion veritable
+// . Nom de la zone
+  _ListZone.push_back( std::string( NomZone ) );
+// . Usage de la zone
+  std::stringstream saux1 ;
+  saux1 << TypeUse ;
+  _ListZone.push_back( saux1.str() );
+}
 //=============================================================================
+void HOMARD_Hypothesis::SupprZone( const char* NomZone )
 {
-  _DiamMin = DiamMin;
+  MESSAGE ("Dans SupprZone pour " << NomZone) ;
+  std::list<std::string>::iterator it = find( _ListZone.begin(), _ListZone.end(), NomZone );
+// Attention a supprimer le nom de zone et le type d'usage
+  if ( it != _ListZone.end() )
+  {
+    it = _ListZone.erase( it );
+    it = _ListZone.erase( it );
+  }
 }
 //=============================================================================
-const double HOMARD_Hypothesis::GetDiamMin() const
+void HOMARD_Hypothesis::SupprZones()
+{
+  _ListZone.clear();
+}
 //=============================================================================
+const std::list<std::string>& HOMARD_Hypothesis::GetZones() const
 {
-  return _DiamMin;
+  return _ListZone;
 }
index c641cf9b21adb7b9fdb4ecc55809c9db04176bd6..9b89e81acf4e9c3d18f5dd8cfe755972dabce45a 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Hypothesis.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #ifndef _HOMARD_HYPOTHESIS_HXX_
 #define _HOMARD_HYPOTHESIS_HXX_
 
+#include "HOMARD.hxx"
+
 #include <string>
 #include <list>
 
-class HOMARD_Hypothesis
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+class HOMARDIMPL_EXPORT HOMARD_Hypothesis
 {
 public:
   HOMARD_Hypothesis();
   ~HOMARD_Hypothesis();
 
-  void                          SetName( const char* NomHypo );
+// Generalites
+  void                          SetName( const char* Name );
   std::string                   GetName() const;
-  void                          SetCaseCreation( const char* NomCasCreation );
-  std::string                   GetCaseCreation() const;
+
   std::string                   GetDumpPython() const;
 
+// Caracteristiques
   void                          SetAdapType( int TypeAdap );
   int                           GetAdapType() const;
-
   void                          SetRefinTypeDera( int TypeRaff, int TypeDera );
   int                           GetRefinType() const;
   int                           GetUnRefType() const;
 
   void                          SetField( const char* FieldName );
-  void                          SetRefinThr( int TypeThR, double ThreshR );
-  void                          SetUnRefThr( int TypeThC, double ThreshC );
-  void                          SetUseComp( int UsCmpI );
-  void                          SetUseField( int UsField );
   std::string                   GetFieldName() const;
+  void                          SetUseField( int UsField );
+  int                           GetUseField()    const;
+
+  void                          SetUseComp( int UsCmpI );
+  int                           GetUseComp()    const;
+  void                          AddComp( const char* NomComp );
+  void                          SupprComp( const char* NomComp );
+  void                          SupprComps();
+  const std::list<std::string>& GetComps() const;
+
+  void                          SetRefinThr( int TypeThR, double ThreshR );
   int                           GetRefinThrType()   const;
   double                        GetThreshR()   const;
+  void                          SetUnRefThr( int TypeThC, double ThreshC );
   int                           GetUnRefThrType()   const;
   double                        GetThreshC()   const;
-  int                           GetUseField()    const;
-  int                           GetUseCompI()    const;
 
-  void                          AddComp( const char* NomComposant );
-  void                          SupprComp();
-  const std::list<std::string>& GetListComp() const;
+  void                          SetNivMax( int NivMax );
+  const int                     GetNivMax() const;
 
-  void                          AddIteration( const char* NomIter );
-  void                          SupprIterations();
-  const std::list<std::string>& GetIterations() const;
+  void                          SetDiamMin( double DiamMin );
+  const double                  GetDiamMin() const;
 
-  void                          AddZone( const char* NomZone, int TypeUse );
-  void                          SupprZone( const char* NomZone );
-  void                          SupprZones();
-  const std::list<std::string>& GetZones() const;
+  void                          SetAdapInit( int AdapInit );
+  const int                     GetAdapInit() const;
+
+  void                          SetExtraOutput( int ExtraOutput );
+  const int                     GetExtraOutput() const;
 
-  void                          AddGroup( const char* LeGroupe);
+  void                          AddGroup( const char* Group);
+  void                          SupprGroup( const char* Group );
+  void                          SupprGroups();
   void                          SetGroups(const std::list<std::string>& ListGroup );
   const std::list<std::string>& GetGroups() const;
 
   void                          SetTypeFieldInterp( int TypeFieldInterp );
   int                           GetTypeFieldInterp() const;
-  void                          AddFieldInterp( const char* FieldInterp );
-  void                          SupprFieldInterp();
-  const std::list<std::string>& GetListFieldInterp() const;
+  void                          AddFieldInterpType( const char* FieldInterp, int TypeInterp );
+  void                          SupprFieldInterp( const char* FieldInterp );
+  void                          SupprFieldInterps();
+  const std::list<std::string>& GetFieldInterps() const;
 
-  void                          SetNivMax( int NivMax );
-  const int                     GetNivMax() const;
-  void                          SetDiamMin( double DiamMin );
-  const double                  GetDiamMin() const;
-  void                          SetAdapInit( int AdapInit );
-  const int                     GetAdapInit() const;
+// Liens avec les autres structures
+  void                          SetCaseCreation( const char* NomCasCreation );
+  std::string                   GetCaseCreation() const;
+
+  void                          LinkIteration( const char* NomIter );
+  void                          UnLinkIteration( const char* NomIter );
+  void                          UnLinkIterations();
+  const std::list<std::string>& GetIterations() const;
 
+  void                          AddZone( const char* NomZone, int TypeUse );
+  void                          SupprZone( const char* NomZone );
+  void                          SupprZones();
+  const std::list<std::string>& GetZones() const;
 
 private:
-  std::string                   _NomHypo;
+  std::string                   _Name;
   std::string                   _NomCasCreation;
 
   int                           _TypeAdap; // -1 pour une adapation Uniforme,
@@ -115,12 +144,14 @@ private:
   int                           _NivMax;
   double                        _DiamMin;
   int                           _AdapInit;
+  int                           _ExtraOutput;
 
   std::list<std::string>        _ListIter;
   std::list<std::string>        _ListZone;
-  std::list<std::string>        _ListComposant;
+  std::list<std::string>        _ListComp;
   std::list<std::string>        _ListGroupSelected;
   std::list<std::string>        _ListFieldInterp;
+
 };
 
 #endif
index 3dcd98b1a46af63dd329d3614f070bdfb9bfc742..62dc29275cb6e04e03978bb69c4c311b4b4c4a64 100644 (file)
@@ -1,11 +1,11 @@
 //  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Iteration.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #include "HOMARD_Iteration.hxx"
+#include "HOMARD.hxx"
 #include "utilities.h"
 
 //=============================================================================
  */
 //=============================================================================
 HOMARD_Iteration::HOMARD_Iteration():
-  _NomIter( "" ), _Etat( false ),
+  _Name( "" ), _Etat( 0 ),
  _NumIter( -1 ),
   _NomMesh( "" ), _MeshFile( "" ),
-  _FieldFile( "" ), _TimeStep( 0 ), _Rank( 0 ),
-  _MessFile( "" ),
+  _FieldFile( "" ), _TimeStep( -1 ), _Rank( -1 ),
+  _LogFile( "" ),
   _IterParent( "" ),
-  _NomHypo( "" ), _NomCas( "" ), _NomDir( "" )
+  _NomHypo( "" ), _NomCas( "" ), _NomDir( "" ),
+  _FileInfo( "" ),
+ _MessInfo( 1 )
 {
-  MESSAGE("HOMARD_Iter");
+  MESSAGE("HOMARD_Iteration");
 }
-
 //=============================================================================
 /*!
  *
@@ -51,283 +62,333 @@ HOMARD_Iteration::~HOMARD_Iteration()
 {
   MESSAGE("~HOMARD_Iteration");
 }
-
 //=============================================================================
-/*!
-*/
 //=============================================================================
-void HOMARD_Iteration::SetName( const char* NomIter )
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration::SetName( const char* Name )
 {
-  _NomIter = std::string( NomIter );
+  _Name = std::string( Name );
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 std::string HOMARD_Iteration::GetName() const
 {
-  return _NomIter;
+  return _Name;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 std::string HOMARD_Iteration::GetDumpPython() const
 {
   if (_IterParent == "") return std::string(" ") ;   // Pas de creation explicite de iteration 0";
 
+  MESSAGE (". Ecriture de l iteration " << _Name );
   std::ostringstream aScript;
-  aScript << "\n# Creation of the iteration " << _NomIter << "\n";
+  aScript << "\n# Creation of the iteration " << _Name << "\n";
   if( _NumIter == 1 )
   {
-       aScript << "\t" << _NomIter << " = homard.CreateIteration(\"";
-       aScript <<  _NomIter << "\", "<<  _NomCas << ".GetIter0Name() )\n";
+       aScript << "\t" << _Name << " = " << _NomCas << ".NextIteration(\"" << _Name << "\")\n";
   }
    else
   {
-       aScript << "\t" << _NomIter << " = homard.CreateIteration(\"";
-       aScript <<  _NomIter << "\", \"" << _IterParent << "\")\n";
+       aScript << "\t" << _Name << " = " << _IterParent << ".NextIteration(\"" << _Name << "\")\n";
   }
+// L'hypothese (doit etre au debut)
+  aScript << "\t" << _Name << ".AssociateHypo(\"" << _NomHypo << "\")\n";
 // Le nom du maillage produit
-  aScript << "\t" << _NomIter << ".SetMeshName(\"" << _NomMesh << "\")\n" ;
+//   MESSAGE (".. maillage produit " << _NomMesh );
+  aScript << "\t" << _Name << ".SetMeshName(\"" << _NomMesh << "\")\n" ;
 // Le fichier du maillage produit
-  aScript << "\t" << _NomIter << ".SetMeshFile(\"" << _MeshFile << "\")\n";
-  if (_FieldFile != "") {
-    aScript << "\t" << _NomIter << ".SetFieldFile(\"" << _FieldFile << "\")\n";
-    aScript << "\tTimeStep = " << _TimeStep << "\n";
-    aScript << "\tRank = " << _Rank << "\n";
-    aScript << "\t" << _NomIter << ".SetTimeStepRank( TimeStep, Rank )\n";
+  aScript << "\t" << _Name << ".SetMeshFile(\"" << _MeshFile << "\")\n";
+// Le fichier des champs
+  if ( _FieldFile != "" )
+  {
+    aScript << "\t" << _Name << ".SetFieldFile(\"" << _FieldFile << "\")\n";
   }
-
-  aScript << "\thomard.AssociateIterHypo(\"" <<_NomIter << "\", \"" << _NomHypo << "\")\n";
-  if (_Etat == true)
+// Si champ de pilotage, valeurs de pas de temps
+  MESSAGE (". champ de pilotage : _TimeStep = " << _TimeStep << ", _Rank : " << _Rank);
+  if ( _TimeStep != -1 )
   {
-     aScript << "\tcodret = homard.Compute(\"" <<_NomIter << "\", 1)\n";
+    if ( _TimeStep == -2 ) {
+      aScript << "\t" << _Name << ".SetTimeStepRankLast()\n";
+    }
+    else
+    {
+      if ( _TimeStep != -1 )
+      {
+        if ( _Rank == -1 )
+        {
+          aScript << "\t" << _Name << ".SetTimeStep( " << _TimeStep << " )\n";
+        }
+        else
+        {
+          aScript << "\t" << _Name << ".SetTimeStepRank( " << _TimeStep << ", " << _Rank << " )\n";
+        }
+      }
+    }
   }
-  else
+// Les instants d'interpolation
+  MESSAGE (". instants d'interpolation ");
+  std::list<std::string>::const_iterator it = _ListFieldInterpTSR.begin() ;
+  while(it != _ListFieldInterpTSR.end())
   {
-     aScript << "\t#codret = homard.Compute(\"" <<_NomIter << "\", 1)\n";
+    std::string FieldName = std::string((*it)) ;
+//     MESSAGE ("... FieldName = "<< FieldName);
+    (*it++);
+    std::string TimeStepstr = std::string((*it)) ;
+//     MESSAGE ("... TimeStepstr = "<< TimeStepstr);
+    (*it++);
+    std::string Rankstr = std::string((*it)) ;
+//     MESSAGE ("... Rankstr = "<< Rankstr);
+    (*it++);
+    aScript << "\t" << _Name << ".SetFieldInterpTimeStepRank( \"" << FieldName << "\"" ;
+    aScript << ", " << TimeStepstr ;
+    aScript << ", " << Rankstr << " )\n" ;
   }
 
+// Compute
+  MESSAGE (". Compute ");
+  if ( _Etat == 2 ) { aScript << "\tcodret = "  <<_Name << ".Compute(1, 1)\n"; }
+  else              { aScript << "\t#codret = " <<_Name << ".Compute(1, 1)\n"; }
+//   MESSAGE (". Fin de l ecriture de l iteration " << _Name );
+
   return aScript.str();
 }
 //=============================================================================
-/*!
-*/
 //=============================================================================
-void HOMARD_Iteration::SetEtat( bool etat )
-{
-  _Etat = etat;
-}
-
+// Caracteristiques
 //=============================================================================
-/*!
-*/
 //=============================================================================
-bool HOMARD_Iteration::GetEtat() const
+void HOMARD_Iteration::SetDirNameLoc( const char* NomDir )
 {
-  return _Etat;
+  _NomDir = std::string( NomDir );
 }
-
 //=============================================================================
-/*!
-*/
+std::string HOMARD_Iteration::GetDirNameLoc() const
+{
+   return _NomDir;
+}
 //=============================================================================
 void HOMARD_Iteration::SetNumber( int NumIter )
 {
   _NumIter = NumIter;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 int HOMARD_Iteration::GetNumber() const
 {
   return _NumIter;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetState( int etat )
+{
+  _Etat = etat;
+}
+//=============================================================================
+int HOMARD_Iteration::GetState() const
+{
+  return _Etat;
+}
 //=============================================================================
 void HOMARD_Iteration::SetMeshName( const char* NomMesh )
 {
   _NomMesh = std::string( NomMesh );
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 std::string HOMARD_Iteration::GetMeshName() const
 {
   return _NomMesh;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetMeshFile( const char* MeshFile )
+{
+  _MeshFile = std::string( MeshFile );
+}
 //=============================================================================
-void HOMARD_Iteration::SetIterParent( const char* IterParent )
+std::string HOMARD_Iteration::GetMeshFile() const
 {
-  _IterParent = IterParent;
+  return _MeshFile;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetFieldFile( const char* FieldFile )
+{
+  _FieldFile = std::string( FieldFile );
+}
 //=============================================================================
-std::string HOMARD_Iteration::GetIterParent() const
+std::string HOMARD_Iteration::GetFieldFile() const
 {
-  return _IterParent;
+  return _FieldFile;
 }
-
 //=============================================================================
-/*!
-*/
+// Instants pour le champ de pilotage
 //=============================================================================
-void HOMARD_Iteration::AddIteration( const char* NomIteration )
+void HOMARD_Iteration::SetTimeStep( int TimeStep )
 {
-  _mesIterFilles.push_back( std::string( NomIteration ) );
+  _TimeStep = TimeStep;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetTimeStepRank( int TimeStep, int Rank )
+{
+  _TimeStep = TimeStep;
+  _Rank = Rank;
+}
 //=============================================================================
-const std::list<std::string>& HOMARD_Iteration::GetIterations() const
+void HOMARD_Iteration::SetTimeStepRankLast()
 {
-  return _mesIterFilles;
+  _TimeStep = -2;
 }
-
 //=============================================================================
-/*!
-*/
+int HOMARD_Iteration::GetTimeStep() const
+{
+  return _TimeStep;
+}
 //=============================================================================
-void HOMARD_Iteration::SupprIterations()
+int HOMARD_Iteration::GetRank() const
 {
-  _mesIterFilles.clear();
+  return _Rank;
 }
-
 //=============================================================================
-/*!
-*/
+// Instants pour un champ a interpoler
 //=============================================================================
-void HOMARD_Iteration::SetHypoName( const char* NomHypo )
+void HOMARD_Iteration::SetFieldInterpTimeStep( const char* FieldInterp, int TimeStep )
 {
-  _NomHypo = std::string( NomHypo );
+  SetFieldInterpTimeStepRank( FieldInterp, TimeStep, TimeStep ) ;
 }
+//=============================================================================
+void HOMARD_Iteration::SetFieldInterpTimeStepRank( const char* FieldInterp, int TimeStep, int Rank )
+{
+  MESSAGE("Champ " << FieldInterp << ", hypothese " << _NomHypo )
+// Verification de la presence du champ dans l'hypothese
+  std::list<std::string>::iterator it = find( _ListFieldInterp.begin(), _ListFieldInterp.end(), FieldInterp );
+  if ( it == _ListFieldInterp.end() )
+  {
+    INFOS("Champ " << FieldInterp << " ; hypothese " << _NomHypo )
+    VERIFICATION("Le champ est inconnu dans l'hypothese associee a cette iteration." == 0);
+  }
 
+// . Nom du champ
+  _ListFieldInterpTSR.push_back( std::string( FieldInterp ) );
+// . Pas de temps
+  std::stringstream saux1 ;
+  saux1 << TimeStep ;
+  _ListFieldInterpTSR.push_back( saux1.str() );
+// . Numero d'ordre
+  std::stringstream saux2 ;
+  saux2 << Rank ;
+  _ListFieldInterpTSR.push_back( saux2.str() );
+}
 //=============================================================================
-/*!
-*/
+const std::list<std::string>& HOMARD_Iteration::GetFieldInterpsTimeStepRank() const
+{
+  return _ListFieldInterpTSR;
+}
 //=============================================================================
-std::string HOMARD_Iteration::GetHypoName() const
+void HOMARD_Iteration::SetFieldInterp( const char* FieldInterp )
 {
-  return _NomHypo;
+  _ListFieldInterp.push_back( std::string( FieldInterp ) );
 }
-
 //=============================================================================
-/*!
-*/
+const std::list<std::string>& HOMARD_Iteration::GetFieldInterps() const
+{
+  return _ListFieldInterp;
+}
 //=============================================================================
-void HOMARD_Iteration::SetMeshFile( const char* MeshFile )
+void HOMARD_Iteration::SupprFieldInterps()
 {
-  _MeshFile = std::string( MeshFile );
+  _ListFieldInterp.clear();
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetLogFile( const char* LogFile )
+{
+  _LogFile = std::string( LogFile );
+}
 //=============================================================================
-std::string HOMARD_Iteration::GetMeshFile() const
+std::string HOMARD_Iteration::GetLogFile() const
 {
-  return _MeshFile;
+  return _LogFile;
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::SetFileInfo( const char* FileInfo )
+{
+  _FileInfo = std::string( FileInfo );
+}
 //=============================================================================
-void HOMARD_Iteration::SetFieldFile( const char* FieldFile )
+std::string HOMARD_Iteration::GetFileInfo() const
 {
-  _FieldFile = std::string( FieldFile );
+  return _FileInfo;
 }
 //=============================================================================
-std::string HOMARD_Iteration::GetFieldFile() const
+//=============================================================================
+// Liens avec les autres iterations
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration::LinkNextIteration( const char* NomIteration )
 {
-  return _FieldFile;
+  _mesIterFilles.push_back( std::string( NomIteration ) );
 }
-
 //=============================================================================
-/*!
-*/
+void HOMARD_Iteration::UnLinkNextIteration( const char* NomIteration )
+{
+  std::list<std::string>::iterator it = find( _mesIterFilles.begin(), _mesIterFilles.end(), NomIteration ) ;
+  if ( it != _mesIterFilles.end() )
+  {
+    MESSAGE ("Dans UnLinkNextIteration pour " << NomIteration) ;
+    it = _mesIterFilles.erase( it ) ;
+  }
+}
 //=============================================================================
-void HOMARD_Iteration::SetTimeStepRank( int TimeStep, int Rank )
+void HOMARD_Iteration::UnLinkNextIterations()
 {
-  _TimeStep = TimeStep;
-  _Rank = Rank;
+  _mesIterFilles.clear();
 }
 //=============================================================================
-int HOMARD_Iteration::GetTimeStep() const
+const std::list<std::string>& HOMARD_Iteration::GetIterations() const
 {
-  return _TimeStep;
+  return _mesIterFilles;
 }
 //=============================================================================
-int HOMARD_Iteration::GetRank() const
+void HOMARD_Iteration::SetIterParentName( const char* IterParent )
 {
-  return _Rank;
+  _IterParent = IterParent;
 }
-
 //=============================================================================
-/*!
-*/
+std::string HOMARD_Iteration::GetIterParentName() const
+{
+  return _IterParent;
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
 //=============================================================================
 void HOMARD_Iteration::SetCaseName( const char* NomCas )
 {
   _NomCas = std::string( NomCas );
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
 std::string HOMARD_Iteration::GetCaseName() const
 {
   return _NomCas;
 }
 //=============================================================================
-/*!
-*/
-//=============================================================================
-void HOMARD_Iteration::SetDirName( const char* NomDir )
+void HOMARD_Iteration::SetHypoName( const char* NomHypo )
 {
-  _NomDir = std::string( NomDir );
+  _NomHypo = std::string( NomHypo );
 }
 //=============================================================================
-/*!
-*/
-//=============================================================================
-std::string HOMARD_Iteration::GetDirName() const
+std::string HOMARD_Iteration::GetHypoName() const
 {
-   return _NomDir;
+  return _NomHypo;
 }
-/*!
-*/
 //=============================================================================
-void HOMARD_Iteration::SetMessFile( const char* MessFile )
+//=============================================================================
+// Divers
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration::SetInfoCompute( int MessInfo )
 {
-  _MessFile = std::string( MessFile );
+  _MessInfo = MessInfo;
 }
-
-//=============================================================================
-/*!
-*/
 //=============================================================================
-std::string HOMARD_Iteration::GetMessFile() const
+int HOMARD_Iteration::GetInfoCompute() const
 {
-  return _MessFile;
+  return _MessInfo;
 }
index 8e5793713eec1219f447374dceb857e5f280a0de..7f0df3542298885f036bca8c6787933d21872463 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Iteration.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #ifndef _HOMARD_ITER_HXX_
 #define _HOMARD_ITER_HXX_
 
+#include "HOMARD.hxx"
+
 #include <string>
 #include <list>
 
-class  HOMARD_Iteration
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+class HOMARDIMPL_EXPORT HOMARD_Iteration
 {
 public:
   HOMARD_Iteration();
   ~HOMARD_Iteration();
 
-  void                          SetName( const char* NomIter );
+// Generalites
+  void                          SetName( const char* Name );
   std::string                   GetName() const;
+
   std::string                   GetDumpPython() const;
 
-  void                          SetEtat( bool etat );
-  bool                          GetEtat() const;
+// Caracteristiques
+  void                          SetDirNameLoc( const char* NomDir );
+  std::string                   GetDirNameLoc() const;
 
   void                          SetNumber( int NumIter );
   int                           GetNumber() const;
 
-  void                          SetMeshFile( const char* MeshFile );
-  std::string                   GetMeshFile() const;
+  void                          SetState( int etat );
+  int                           GetState() const;
 
   void                          SetMeshName( const char* NomMesh );
   std::string                   GetMeshName() const;
 
+  void                          SetMeshFile( const char* MeshFile );
+  std::string                   GetMeshFile() const;
+
   void                          SetFieldFile( const char* FieldFile );
   std::string                   GetFieldFile() const;
+// Instants pour le champ de pilotage
+  void                          SetTimeStep( int TimeStep );
   void                          SetTimeStepRank( int TimeStep, int Rank );
+  void                          SetTimeStepRankLast();
   int                           GetTimeStep() const;
   int                           GetRank() const;
-
-  void                          SetIterParent( const char* iterParent );
-  std::string                   GetIterParent() const;
-
-  void                          AddIteration( const char* iter );
+// Instants pour un champ a interpoler
+  void                          SetFieldInterpTimeStep( const char* FieldInterp, int TimeStep );
+  void                          SetFieldInterpTimeStepRank( const char* FieldInterp, int TimeStep, int Rank );
+  const std::list<std::string>& GetFieldInterpsTimeStepRank() const;
+  void                          SetFieldInterp( const char* FieldInterp );
+  const std::list<std::string>& GetFieldInterps() const;
+  void                          SupprFieldInterps();
+
+  void                          SetLogFile( const char* LogFile );
+  std::string                   GetLogFile() const;
+
+  void                          SetFileInfo( const char* FileInfo );
+  std::string                   GetFileInfo() const;
+
+// Liens avec les autres iterations
+  void                          LinkNextIteration( const char* NomIteration );
+  void                          UnLinkNextIteration( const char* NomIteration );
+  void                          UnLinkNextIterations();
   const std::list<std::string>& GetIterations() const;
-  void                          SupprIterations();
 
-  void                          SetHypoName( const char* NomHypo );
-  std::string                   GetHypoName() const;
+  void                          SetIterParentName( const char* iterParent );
+  std::string                   GetIterParentName() const;
 
+// Liens avec les autres structures
   void                          SetCaseName( const char* NomCas );
   std::string                   GetCaseName() const;
 
-  void                          SetDirName( const char* NomDir );
-  std::string                   GetDirName() const;
+  void                          SetHypoName( const char* NomHypo );
+  std::string                   GetHypoName() const;
 
-  void                          SetMessFile( const char* MessFile );
-  std::string                   GetMessFile() const;
+// Divers
+  void                          SetInfoCompute( int MessInfo );
+  int                           GetInfoCompute() const;
 
 private:
-  std::string                   _NomIter;
-  bool                          _Etat;
+  std::string                   _Name;
+  int                           _Etat;
   int                           _NumIter;
   std::string                   _NomMesh;
   std::string                   _MeshFile;
   std::string                   _FieldFile;
   int                           _TimeStep;
   int                           _Rank;
-  std::string                   _MessFile;
+  std::string                   _LogFile;
   std::string                   _IterParent;
   std::string                   _NomHypo;
   std::string                   _NomCas;
   std::string                   _NomDir;
   std::list<std::string>        _mesIterFilles;
+  std::string                   _FileInfo;
+  int                           _MessInfo;
+  // La liste des champs retenus par l'hypothese
+  std::list<std::string>        _ListFieldInterp;
+  // La liste des triplets (champs, pas de temps, numero d'ordre) retenus par l'iteration
+  std::list<std::string>        _ListFieldInterpTSR;
 };
 
 #endif
diff --git a/src/HOMARD/HOMARD_YACS.cxx b/src/HOMARD/HOMARD_YACS.cxx
new file mode 100644 (file)
index 0000000..9cf0203
--- /dev/null
@@ -0,0 +1,219 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : HOMARD_YACS.cxx
+//  Author : Gerald NICOLAS, EDF
+//  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+
+#include "HOMARD_YACS.hxx"
+#include "utilities.h"
+
+//=============================================================================
+/*!
+ *  default constructor:
+ */
+//=============================================================================
+HOMARD_YACS::HOMARD_YACS():
+  _Name( "" ),
+  _NomCas( "" ),
+  _NomDir( "" ),
+  _MeshFile( "" ),
+  _ScriptFile( "" )
+{
+  MESSAGE("HOMARD_YACS");
+}
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+HOMARD_YACS::~HOMARD_YACS()
+{
+  MESSAGE("~HOMARD_YACS");
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS::SetName( const char* Name )
+{
+  _Name = std::string( Name );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetName() const
+{
+  return _Name;
+}
+//=============================================================================
+std::string HOMARD_YACS::GetDumpPython() const
+{
+  MESSAGE (". Ecriture du schema " << _Name );
+  std::ostringstream aScript;
+  aScript << "\n# Creation of the schema " << _Name << "\n";
+// Creation du schema
+  aScript << "\t" << _Name << " = " << _NomCas << ".CreateYACSSchema(\"" << _Name << "\", \"" << _ScriptFile << "\", \"" << _NomDir << "\", \"" << _MeshFile << "\")\n";
+// Le type de schema
+  aScript << "\t" << _Name << ".SetType(" << _Type << ")\n";
+// Les controles de convergences
+  if ( _MaxIter > 0 ) { aScript << "\t" << _Name << ".SetMaxIter(" << _MaxIter << ")\n"; }
+  if ( _MaxNode > 0 ) { aScript << "\t" << _Name << ".SetMaxNode(" << _MaxNode << ")\n"; }
+  if ( _MaxElem > 0 ) { aScript << "\t" << _Name << ".SetMaxElem(" << _MaxElem << ")\n"; }
+
+// L'ecriture du schema
+  aScript << "\tcodret = " << _Name << ".Write()\n";
+
+  MESSAGE (". Fin de l ecriture du schema " << _Name );
+
+  return aScript.str();
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques de la convergence
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS::SetType( int Type )
+{
+  _Type = Type;
+}
+//=============================================================================
+int HOMARD_YACS::GetType() const
+{
+  return _Type;
+}
+//=============================================================================
+void HOMARD_YACS::SetMaxIter( int MaxIter )
+{
+  _MaxIter = MaxIter;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxIter() const
+{
+  return _MaxIter;
+}
+//=============================================================================
+void HOMARD_YACS::SetMaxNode( int MaxNode )
+{
+  _MaxNode = MaxNode;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxNode() const
+{
+  return _MaxNode;
+}
+//=============================================================================
+void HOMARD_YACS::SetMaxElem( int MaxElem )
+{
+  _MaxElem = MaxElem;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxElem() const
+{
+  return _MaxElem;
+}
+//=============================================================================
+void HOMARD_YACS::SetTestConvergence( int TypeTest, double VRef )
+{
+  _TypeTest = TypeTest;
+  _VRef = VRef;
+}
+//=============================================================================
+int HOMARD_YACS::GetTestConvergenceType() const
+{
+  return _TypeTest;
+}
+//=============================================================================
+double HOMARD_YACS::GetTestConvergenceVRef() const
+{
+  return _VRef;
+}
+//=============================================================================
+//=============================================================================
+// Repertoire et fichiers
+//=============================================================================
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS::SetDirName( const char* NomDir )
+{
+  _NomDir = std::string( NomDir );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetDirName() const
+{
+   return _NomDir;
+}
+//=============================================================================
+void HOMARD_YACS::SetMeshFile( const char* MeshFile )
+{
+  _MeshFile = std::string( MeshFile );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetMeshFile() const
+{
+  return _MeshFile;
+}
+//=============================================================================
+void HOMARD_YACS::SetScriptFile( const char* ScriptFile )
+{
+  _ScriptFile = std::string( ScriptFile );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetScriptFile() const
+{
+  return _ScriptFile;
+}
+//=============================================================================
+void HOMARD_YACS::SetXMLFile( const char* XMLFile )
+{
+  _XMLFile = std::string( XMLFile );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetXMLFile() const
+{
+  return _XMLFile;
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS::SetCaseName( const char* NomCas )
+{
+  _NomCas = std::string( NomCas );
+}
+//=============================================================================
+std::string HOMARD_YACS::GetCaseName() const
+{
+  return _NomCas;
+}
+//=============================================================================
+//=============================================================================
+// Divers
+//=============================================================================
+//=============================================================================
diff --git a/src/HOMARD/HOMARD_YACS.hxx b/src/HOMARD/HOMARD_YACS.hxx
new file mode 100644 (file)
index 0000000..d3a158a
--- /dev/null
@@ -0,0 +1,103 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : HOMARD_YACS.hxx
+//  Author : Gerald NICOLAS, EDF
+//  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+
+#ifndef _HOMARD_YACS_HXX_
+#define _HOMARD_YACS_HXX_
+
+#include "HOMARD.hxx"
+
+#include <string>
+#include <list>
+
+class HOMARDIMPL_EXPORT HOMARD_YACS
+{
+public:
+  HOMARD_YACS();
+  ~HOMARD_YACS();
+
+// Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+// Caracteristiques
+  void                          SetType( int Type );
+  int                           GetType() const;
+
+  void                          SetMaxIter( int MaxIter );
+  int                           GetMaxIter() const;
+  void                          SetMaxNode( int MaxNode );
+  int                           GetMaxNode() const;
+  void                          SetMaxElem( int MaxElem );
+  int                           GetMaxElem() const;
+
+  void                          SetTestConvergence( int TypeTest, double VRef );
+  int                           GetTestConvergenceType() const;
+  double                        GetTestConvergenceVRef() const;
+
+  void                          SetDirName( const char* NomDir );
+  std::string                   GetDirName() const;
+
+  void                          SetMeshFile( const char* MeshFile );
+  std::string                   GetMeshFile() const;
+
+  void                          SetScriptFile( const char* ScriptFile );
+  std::string                   GetScriptFile() const;
+
+  void                          SetXMLFile( const char* XMLFile );
+  std::string                   GetXMLFile() const;
+
+// Liens avec les autres structures
+  void                          SetCaseName( const char* NomCas );
+  std::string                   GetCaseName() const;
+
+
+// Divers
+
+private:
+  std::string                   _Name;
+  std::string                   _NomCas;
+  std::string                   _NomDir;
+  std::string                   _MeshFile;
+  std::string                   _ScriptFile;
+  int                           _Type;
+  int                           _MaxIter;
+  int                           _MaxNode;
+  int                           _MaxElem;
+  int                           _TypeTest;
+  double                        _VRef;
+  std::string                   _XMLFile;
+};
+
+#endif
index 0b23732d77f4764eea37f3de9c1f4ca9f589541e..14ee8c802ef8b3fa522f4dc7487180871c74e7d1 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Zone.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #include "HOMARD_Zone.hxx"
+#include "HOMARD.hxx"
 #include "utilities.h"
 
 //=============================================================================
@@ -31,7 +41,7 @@
  */
 //=============================================================================
 HOMARD_Zone::HOMARD_Zone():
-  _NomZone( "" ),_ZoneType( 2 ),
+  _Name( "" ),_Type( 2 ),
   _Xmin( 0 ), _Xmax( 0 ), _Ymin( 0 ), _Ymax( 0 ), _Zmin( 0 ), _Zmax( 0 ),
   _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _Rayon( 0 ),
   _Xaxe( 0 ), _Yaxe( 0 ), _Zaxe( 0 ), _Haut( 0 ),
@@ -45,115 +55,112 @@ HOMARD_Zone::~HOMARD_Zone()
 {
   MESSAGE("~HOMARD_Zone") ;
 }
-
 //=============================================================================
-void HOMARD_Zone::SetName( const char* NomZone )
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Zone::SetName( const char* Name )
 {
-  _NomZone = std::string( NomZone ) ;
+  _Name = std::string( Name );
 }
-
 //=============================================================================
 std::string HOMARD_Zone::GetName() const
 {
-  return _NomZone;
+  return _Name;
 }
-
 //=============================================================================
 std::string HOMARD_Zone::GetDumpPython() const
 {
-//   MESSAGE("GetDumpPython avec _ZoneType " << _ZoneType) ;
-//   MESSAGE("GetDumpPython avec _NomZone " << _NomZone) ;
+//   MESSAGE("GetDumpPython avec _Type " << _Type) ;
+//   MESSAGE("GetDumpPython avec _Name " << _Name) ;
   std::ostringstream aScript;
   aScript << "\n# Creation of the ";
-  if ( _ZoneType >= 11 and _ZoneType <= 13 ) { aScript << "rectangle " ; }
-  else if ( _ZoneType == 2 ) { aScript << "box " ;}
-  else if ( _ZoneType >= 31 and _ZoneType <= 33 ) { aScript << "disk " ;}
-  else if ( _ZoneType == 4 ) { aScript << "sphere " ; }
-  else if ( _ZoneType == 5 ) { aScript << "cylinder " ; }
-  else if ( _ZoneType >= 61 and _ZoneType <= 63 ) { aScript << "disk with hole " ;}
-  else if ( _ZoneType == 7 ) { aScript << "pipe " ; }
-  aScript << _NomZone << "\n" ;
+  if ( _Type >= 11 && _Type <= 13 ) { aScript << "rectangle " ; }
+  else if ( _Type == 2 ) { aScript << "box " ;}
+  else if ( _Type >= 31 && _Type <= 33 ) { aScript << "disk " ;}
+  else if ( _Type == 4 ) { aScript << "sphere " ; }
+  else if ( _Type == 5 ) { aScript << "cylinder " ; }
+  else if ( _Type >= 61 && _Type <= 63 ) { aScript << "disk with hole " ;}
+  else if ( _Type == 7 ) { aScript << "pipe " ; }
+  aScript << _Name << "\n" ;
 //
-  aScript << "\t" << _NomZone << " = homard.CreateZone" ;
+  aScript << "\t" << _Name << " = homard.CreateZone" ;
 //
-  switch (_ZoneType)
+  switch (_Type)
   {
     case 11:
-    { aScript << "Box2D( \"" << _NomZone << "\", " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", 1 )\n";
+    { aScript << "Box2D( \"" << _Name << "\", " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", 1 )\n";
       break ;
     }
     case 12:
-    { aScript << "Box2D( \"" << _NomZone << "\", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ", 2 )\n";
+    { aScript << "Box2D( \"" << _Name << "\", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ", 2 )\n";
       break ;
     }
     case 13:
-    { aScript << "Box2D( \"" << _NomZone << "\", " << _Zmin << ", " << _Zmax << ", " << _Xmin << ", " << _Xmax << ", 3 )\n";
+    { aScript << "Box2D( \"" << _Name << "\", " << _Zmin << ", " << _Zmax << ", " << _Xmin << ", " << _Xmax << ", 3 )\n";
       break ;
     }
     case 2:
-    { aScript << "Box( \""  << _NomZone << "\", " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ")\n";
+    { aScript << "Box( \""  << _Name << "\", " << _Xmin << ", " << _Xmax << ", " << _Ymin << ", " << _Ymax << ", " << _Zmin << ", " << _Zmax << ")\n";
       break ;
     }
 
     case 4:
-    { aScript << "Sphere( \"" << _NomZone << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ")\n";
+    { aScript << "Sphere( \"" << _Name << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ")\n";
       break ;
     }
 
     case 31:
-    { aScript << "Disk( \"" << _NomZone << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", 1 )\n";
+    { aScript << "Disk( \"" << _Name << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", 1 )\n";
       break ;
     }
     case 32:
-    { aScript << "Disk( \"" << _NomZone << "\", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", 2 )\n";
+    { aScript << "Disk( \"" << _Name << "\", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", 2 )\n";
       break ;
     }
     case 33:
-    { aScript << "Disk( \"" << _NomZone << "\", " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", 3 )\n";
+    { aScript << "Disk( \"" << _Name << "\", " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", 3 )\n";
       break ;
     }
     case 5:
-    { aScript << "Cylinder( \"" << _NomZone << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ")\n";
+    { aScript << "Cylinder( \"" << _Name << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ")\n";
       break ;
     }
 
     case 61:
-    { aScript << "DiskWithHole( \"" << _NomZone << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", " << _Rayonint << ", 1 )\n";
+    { aScript << "DiskWithHole( \"" << _Name << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Rayon << ", " << _Rayonint << ", 1 )\n";
       break ;
     }
     case 62:
-    { aScript << "DiskWithHole( \"" << _NomZone << "\", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", " << _Rayonint << ", 2 )\n";
+    { aScript << "DiskWithHole( \"" << _Name << "\", " << _Ycentre << ", " << _Zcentre << ", " << _Rayon << ", " << _Rayonint << ", 2 )\n";
       break ;
     }
     case 63:
-    { aScript << "DiskWithHole( \"" << _NomZone << "\", " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", " << _Rayonint << ", 3 )\n";
+    { aScript << "DiskWithHole( \"" << _Name << "\", " << _Zcentre << ", " << _Xcentre << ", " << _Rayon << ", " << _Rayonint << ", 3 )\n";
       break ;
     }
     case 7:
-    { aScript << "Pipe( \"" << _NomZone << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ", " << _Rayonint << ")\n";
+    { aScript << "Pipe( \"" << _Name << "\", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon << ", " << _Haut << ", " << _Rayonint << ")\n";
       break ;
     }
   }
 
   return aScript.str() ;
 }
-
 //=============================================================================
-void HOMARD_Zone::SetZoneType( int ZoneType )
-{
-  _ZoneType = ZoneType;
-}
-
 //=============================================================================
-int HOMARD_Zone::GetZoneType() const
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Zone::SetType( int Type )
 {
-  return _ZoneType;
+  _Type = Type;
 }
-
-//======================================================================
-void HOMARD_Zone::SetLimit( double X0, double X1, double X2 )
+//=============================================================================
+int HOMARD_Zone::GetType() const
 {
-  _Xincr = X0; _Yincr = X1; _Zincr = X2;
+  return _Type;
 }
 //=======================================================================================
 void HOMARD_Zone::SetBox( double X0, double X1, double X2, double X3, double X4, double X5 )
@@ -162,16 +169,6 @@ void HOMARD_Zone::SetBox( double X0, double X1, double X2, double X3, double X4,
   _Ymin = X2; _Ymax = X3;
   _Zmin = X4; _Zmax = X5;
 }
-
-//======================================================================
-void HOMARD_Zone::SetSphere( double X0, double X1, double X2, double X3 )
-{
-  _Xcentre = X0;
-  _Ycentre = X1;
-  _Zcentre = X2;
-  _Rayon = X3;
-}
-
 //=======================================================================================
 void HOMARD_Zone::SetCylinder( double X0, double X1, double X2,
                                double X3, double X4, double X5, double X6, double X7 )
@@ -199,23 +196,20 @@ void HOMARD_Zone::SetPipe( double X0, double X1, double X2,
   _Haut = X7;
   _Rayonint = X8;
 }
-
-//=======================================================================================
-std::vector<double> HOMARD_Zone::GetLimit() const
+//======================================================================
+void HOMARD_Zone::SetSphere( double X0, double X1, double X2, double X3 )
 {
-  std::vector<double> mesLimit;
-  mesLimit.push_back( _Xincr ) ;
-  mesLimit.push_back( _Yincr ) ;
-  mesLimit.push_back( _Zincr ) ;
-  return mesLimit;
+  _Xcentre = X0;
+  _Ycentre = X1;
+  _Zcentre = X2;
+  _Rayon = X3;
 }
-
 //=======================================================================================
 std::vector<double> HOMARD_Zone::GetCoords() const
 {
   std::vector<double> mesCoor;
 //
-  switch (_ZoneType)
+  switch (_Type)
   {
 //  Rectangle ou parallelepipede
     case 11:
@@ -282,17 +276,38 @@ std::vector<double> HOMARD_Zone::GetCoords() const
       mesCoor.push_back( _Rayonint ) ;
       break ;
     }
-    ASSERT ( _ZoneType == -1 ) ;
+    VERIFICATION ( ( (_Type>10) && (_Type<14) ) || (_Type==2) || ( (_Type>30) && (_Type<34) ) || (_Type==4) || (_Type==5) || ( (_Type>60) && (_Type<64) ) || (_Type==7) ) ;
   }
   return mesCoor;
 }
-
+//======================================================================
+void HOMARD_Zone::SetLimit( double X0, double X1, double X2 )
+{
+  _Xincr = X0; _Yincr = X1; _Zincr = X2;
+}
+//=======================================================================================
+std::vector<double> HOMARD_Zone::GetLimit() const
+{
+  std::vector<double> mesLimit;
+  mesLimit.push_back( _Xincr ) ;
+  mesLimit.push_back( _Yincr ) ;
+  mesLimit.push_back( _Zincr ) ;
+  return mesLimit;
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
 //=============================================================================
 void HOMARD_Zone::AddHypo( const char* NomHypo )
 {
   _ListHypo.push_back( std::string( NomHypo ) ) ;
 }
-
+//=============================================================================
+const std::list<std::string>& HOMARD_Zone::GetHypo() const
+{
+  return _ListHypo;
+}
 //=============================================================================
 void HOMARD_Zone::SupprHypo( const char* NomHypo )
 {
@@ -300,16 +315,9 @@ void HOMARD_Zone::SupprHypo( const char* NomHypo )
   if ( it != _ListHypo.end() )
   {
     MESSAGE ("Dans SupprHypo pour " << NomHypo) ;
-    _ListHypo.erase( it ) ;
+    it = _ListHypo.erase( it ) ;
   }
 }
-
-//=============================================================================
-const std::list<std::string>& HOMARD_Zone::GetHypo() const
-{
-  return _ListHypo;
-}
-
 //=============================================================================
 void HOMARD_Zone::SupprHypos()
 {
index e8906bb269ce997461c84830af0314c0df7ea166..bc45d4566706d41cfbda4c4a5347ce6f1a31d9b1 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : HOMARD_Zone.hxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
+//
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
 
 #ifndef _HOMARD_Zone_HXX_
 #define _HOMARD_Zone_HXX_
 
+#include "HOMARD.hxx"
+
 #include <vector>
 #include <string>
 #include <list>
 
-class HOMARD_Zone
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+class HOMARDIMPL_EXPORT HOMARD_Zone
 {
 public:
   HOMARD_Zone();
   ~HOMARD_Zone();
 
-  void                          SetName( const char* NomZone );
+// Generalites
+  void                          SetName( const char* Name );
   std::string                   GetName() const;
+
   std::string                   GetDumpPython() const;
 
+// Caracteristiques
+  void                          SetType( int Type );
+  int                           GetType() const;
+
   void                          SetBox( double X0, double X1, double X2,
                                         double X3, double X4, double X5 );
-  std::vector<double>           GetCoords() const;
-
-  void                          SetSphere( double X0, double X1, double X2, double X3 );
 
   void                          SetCylinder( double X0, double X1, double X2, double X3,
                                              double X4, double X5, double X6, double X7 );
+
   void                          SetPipe( double X0, double X1, double X2, double X3,
                                          double X4, double X5, double X6, double X7, double X8 );
 
+  void                          SetSphere( double X0, double X1, double X2, double X3 );
+
+  std::vector<double>           GetCoords() const;
+
   void                          SetLimit( double X0, double X1, double X2 );
   std::vector<double>           GetLimit() const;
 
-  void                          SetZoneType( int ZoneType );
-  int                           GetZoneType() const;
-
+// Liens avec les autres structures
   void                          AddHypo( const char* NomHypo );
-  void                          SupprHypo( const char* NomHypo );
   const std::list<std::string>& GetHypo() const;
+  void                          SupprHypo( const char* NomHypo );
   void                          SupprHypos();
 
 private:
-  std::string                   _NomZone;
-  int                           _ZoneType;
+  std::string                   _Name;
+  int                           _Type;
   std::list<std::string>        _ListHypo;
   double                        _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax;
   double                        _Xcentre, _Ycentre, _Zcentre, _Rayon, _Rayonint;
index c025a5e22644e58862035a26feea331c89f407c7..cb000bb8c6f4a9d0b75238e40c97a7fbb595a15f 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-#include <string.h>
+// Pilote l'ecriture du fichier de configuration pour lancer l'execution de HOMARD
+
+#include <cstring>
+#ifndef WIN32
 #include <unistd.h>
+#endif
 #include <sys/stat.h>
 
+#include "HomardDriver.hxx"
 #include "Utils_SALOME_Exception.hxx"
 #include "utilities.h"
-#include "HomardDriver.hxx"
 
 //=============================================================================
 //=============================================================================
 HomardDriver::HomardDriver(const std::string siter, const std::string siterp1):
   _HOMARD_Exec( "" ), _NomDir( "" ), _NomFichierConfBase( "HOMARD.Configuration" ),
-  _NomFichierConf( "" ), _siter( "" ), _siterp1( "" ),
+  _NomFichierConf( "" ), _NomFichierDonn( "" ), _siter( "" ), _siterp1( "" ),
   _Texte( "" ), _bLu( false )
 {
+  MESSAGE("siter = "<<siter<<", siterp1 = "<<siterp1);
+// Le repertoire ou se trouve l'executable HOMARD
+  std::string dir ;
+  if ( getenv("HOMARD_REP_EXE_PRIVATE") != NULL ) { dir = getenv("HOMARD_REP_EXE_PRIVATE") ; }
+  else                                            { dir = getenv("HOMARD_REP_EXE") ; }
+  MESSAGE("dir ="<<dir);
+// L'executable HOMARD
+  std::string executable ;
+  if ( getenv("HOMARD_EXE_PRIVATE") != NULL ) { executable = getenv("HOMARD_EXE_PRIVATE") ; }
+  else                                        { executable = getenv("HOMARD_EXE") ; }
+  MESSAGE("executable ="<<executable);
 // Memorisation du nom complet de l'executable HOMARD
-  char* dirchar; char* execchar;
-  std::string dir;
-  std::string executable;
-  if ( !(dirchar = getenv("HOMARD_REP_EXE_PRIVATE")) )
-  { dirchar = getenv("HOMARD_REP_EXE") ; }
-  dir = std::string(dirchar);
-  MESSAGE("HomardDriver, dirchar ="<<dirchar<<", dir ="<<dir);
-  if ( !(execchar = getenv("HOMARD_EXE_PRIVATE")) )
-  { execchar = getenv("HOMARD_EXE"); }
-  executable = std::string(execchar);
-  MESSAGE("HomardDriver, execchar ="<<execchar<<", executable ="<<executable);
   _HOMARD_Exec = dir + "/" + executable ;
-  MESSAGE("HomardDriver, _HOMARD_Exec ="<<_HOMARD_Exec);
+  MESSAGE("==> _HOMARD_Exec ="<<_HOMARD_Exec) ;
 //
   _siter = siter ;
   _siterp1 = siterp1 ;
 }
-
 //=============================================================================
 //=============================================================================
 HomardDriver::~HomardDriver()
 {
 }
-
-////=============================================================================
-void HomardDriver::TexteInit( const std::string DirCompute, const std::string DirComputePa, const std::string MessFile )
+//===============================================================================
+// A. Generalites
+//===============================================================================
+void HomardDriver::TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue )
 {
-  MESSAGE("TexteInit, MessFile ="<<MessFile<<", DirCompute ="<<DirCompute<<", DirComputePa ="<<DirComputePa);
+  MESSAGE("TexteInit, DirCompute ="<<DirCompute<<", LogFile ="<<LogFile);
+//
+  _Texte  = "ListeStd \"" + LogFile + "\"\n" ;
+  _Texte += "RepeTrav \"" + DirCompute + "\"\n" ;
+  _Texte += "RepeInfo \"" + DirCompute + "\"\n" ;
+  _Texte += "Langue \"" + Langue + "\"\n" ;
 //
-  _Texte  = "Action   homa\n" ;
-  _Texte += "CCAssoci med\n" ;
+}
+//===============================================================================
+void HomardDriver::TexteAdap( int ExtType )
+{
+  MESSAGE("TexteAdap");
+//
+  _Texte += "Action   homa\n" ;
+  if ( ExtType ==  0 )      { _Texte += "CCAssoci med\n" ; }
+  else if ( ExtType ==  1 ) { _Texte += "CCAssoci saturne\n" ; }
+  else                      { _Texte += "CCAssoci saturne_2d\n" ; }
   _Texte += "ModeHOMA 1\n" ;
   _Texte += "NumeIter " + _siter + "\n" ;
-  _Texte += "ListeStd \"" + MessFile + "\"\n" ;
-  _Texte += "# Maillages HOMARD \n" ;
-  _Texte += "HOMaiN__ Mai" + _siter   + " \"" + DirComputePa + "/maill." + _siter   + ".hom.med\"\n" ;
-  _Texte += "HOMaiNP1 Mai" + _siterp1 + " \"" + DirCompute   + "/maill." + _siterp1 + ".hom.med\"\n" ;
-  _Texte += "RepeTrav \"" + DirCompute + "\"\n" ;
 //
 }
-
-////=============================================================================
+//===============================================================================
+void HomardDriver::TexteInfo( int TypeBila, int NumeIter )
+{
+  MESSAGE("TexteInit, TypeBila ="<<TypeBila);
+//
+  _Texte += "ModeHOMA 2\n" ;
+  std::stringstream saux1 ;
+  saux1 << TypeBila ;
+  std::string saux2 = saux1.str() ;
+  _Texte += "TypeBila " + saux2 + "\n" ;
+  if ( NumeIter ==  0 )
+  {
+    _Texte += "NumeIter 0\n" ;
+    _Texte += "Action   info_av\n" ;
+    _Texte += "CCAssoci med\n" ;
+  }
+  else
+  {
+    _Texte += "NumeIter " + _siter + "\n" ;
+    _Texte += "Action   info_ap\n" ;
+    _Texte += "CCAssoci homard\n" ;
+  }
+//
+}
+//===============================================================================
+// B. Les maillages en entree et en sortie
+//===============================================================================
 void HomardDriver::TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres )
 {
-  MESSAGE("TexteMaillage, NomMesh ="<<NomMesh<<", MeshFile ="<<MeshFile);
+  MESSAGE("TexteMaillage, NomMesh  = "<<NomMesh);
+  MESSAGE("TexteMaillage, MeshFile = "<<MeshFile);
+  MESSAGE("TexteMaillage, apres = "<<apres);
   std::string saux ;
   saux = "P1" ;
   if ( apres < 1 ) { saux = "__" ; }
@@ -89,7 +128,21 @@ void HomardDriver::TexteMaillage( const std::string NomMesh, const std::string M
   _Texte += "CCMaiN" + saux + " \"" + MeshFile + "\"\n" ;
 }
 
-////=============================================================================
+//===============================================================================
+void HomardDriver::TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres )
+{
+  MESSAGE("TexteMaillageHOMARD, Dir ="<<Dir<<", liter ="<<liter<<", apres ="<<apres);
+  std::string saux ;
+  if ( apres < 1 ) { saux = "__" ; }
+  else             { saux = "P1" ; }
+
+  _Texte += "# Maillage HOMARD " + liter + "\n" ;
+  _Texte += "HOMaiN" + saux + " Mai" + liter   + " \"" + Dir + "/maill." + liter   + ".hom.med\"\n" ;
+}
+
+//===============================================================================
+// C. Le pilotage de l'adaptation
+//===============================================================================
 void HomardDriver::TexteConfRaffDera( int ConfType, int TypeAdap, int TypeRaff, int TypeDera )
 {
   MESSAGE("TexteConfRaffDera, ConfType ="<<ConfType);
@@ -100,24 +153,34 @@ void HomardDriver::TexteConfRaffDera( int ConfType, int TypeAdap, int TypeRaff,
   std::string saux ;
   switch (ConfType)
   {
-    case 1: //
+    case -2: //
     {
-      saux = "conforme" ;
+      saux = "NON_CONFORME_1_ARETE" ;
       break;
     }
-    case 2: //
+    case -1: //
     {
-      saux = "non_conforme_1_noeud" ;
+      saux = "CONFORME_BOITES" ;
       break;
     }
-    case 3: //
+    case 0: //
+    {
+      saux = "CONFORME" ;
+      break;
+    }
+    case 1: //
+    {
+      saux = "NON_CONFORME" ;
+      break;
+    }
+    case 2: //
     {
-      saux = "non_conforme_1_arete" ;
+      saux = "NON_CONFORME_1_NOEUD" ;
       break;
     }
-    case 4: //
+    case 3: //
     {
-      saux = "non_conforme_indicateur" ;
+      saux = "NON_CONFORME_INDICATEUR" ;
       break;
     }
   }
@@ -167,14 +230,13 @@ void HomardDriver::TexteConfRaffDera( int ConfType, int TypeAdap, int TypeRaff,
 //
 //   MESSAGE("A la fin de HomardDriver::TexteConfRaffDera, _Texte ="<<_Texte);
 }
-////=============================================================================
-void HomardDriver::TexteCompo( int NumeComp, const std::string NompCompo)
+//===============================================================================
+void HomardDriver::TexteCompo( int NumeComp, const std::string NomCompo)
 {
-  MESSAGE("TexteCompo, NumeComp = "<<NumeComp<<", NompCompo = "<<NompCompo);
-  _Texte +="CCCoChaI \"" + NompCompo + "\"\n" ;
+  MESSAGE("TexteCompo, NumeComp = "<<NumeComp<<", NomCompo = "<<NomCompo);
+  _Texte +="CCCoChaI \"" + NomCompo + "\"\n" ;
 }
-
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7, double x8 )
 {
   MESSAGE("TexteZone, NumeZone = "<<NumeZone<<", ZoneType = "<<ZoneType<<", TypeUse = "<<TypeUse);
@@ -190,22 +252,20 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
 //    <0 signifie que l'on deraffinera
 //
   int ZoneTypeHOMARD ;
-  if ( ZoneType >= 11 and ZoneType <= 13 ) { ZoneTypeHOMARD = 1 ; }
-  else if ( ZoneType >= 31 and ZoneType <= 33 ) { ZoneTypeHOMARD = 3 ; }
-  else if ( ZoneType >= 61 and ZoneType <= 63 ) { ZoneTypeHOMARD = 6 ; }
+  if ( ZoneType >= 11 && ZoneType <= 13 ) { ZoneTypeHOMARD = 1 ; }
+  else if ( ZoneType >= 31 && ZoneType <= 33 ) { ZoneTypeHOMARD = 3 ; }
+  else if ( ZoneType >= 61 && ZoneType <= 63 ) { ZoneTypeHOMARD = 6 ; }
   else { ZoneTypeHOMARD = ZoneType ; }
 //
   if ( TypeUse < 0 ) { ZoneTypeHOMARD = -ZoneTypeHOMARD ; }
 //
   std::stringstream saux1 ;
   saux1 << NumeZone ;
-  saux2 = saux1.str() ;
-  saux = "#\n# Zone numero " + saux2 + "\n" ;
+  saux = "#\n# Zone numero " + saux1.str() + "\n" ;
 //
   { std::stringstream saux1 ;
     saux1 << NumeZone << " " << ZoneTypeHOMARD ;
-    saux2 = saux1.str() ;
-    saux += "ZoRaType " + saux2 + "\n" ;
+    saux += "ZoRaType " + saux1.str() + "\n" ;
   }
 //
 // Cas du rectangle
@@ -216,23 +276,19 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     saux += "#Rectangle\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmin " + saux2 + "\n" ;
+      saux += "ZoRaXmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmax " + saux2 + "\n" ;
+      saux += "ZoRaXmax " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmin " + saux2 + "\n" ;
+      saux += "ZoRaYmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmax " + saux2 + "\n" ;
+      saux += "ZoRaYmax " + saux1.str() + "\n" ;
     }
   }
 //
@@ -242,23 +298,19 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     saux += "#Rectangle\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmin " + saux2 + "\n" ;
+      saux += "ZoRaXmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmax " + saux2 + "\n" ;
+      saux += "ZoRaXmax " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x4 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmin " + saux2 + "\n" ;
+      saux += "ZoRaYmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x5 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmax " + saux2 + "\n" ;
+      saux += "ZoRaYmax " + saux1.str() + "\n" ;
     }
   }
 //
@@ -268,23 +320,19 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     saux += "#Rectangle\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmin " + saux2 + "\n" ;
+      saux += "ZoRaXmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmax " + saux2 + "\n" ;
+      saux += "ZoRaXmax " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x4 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmin " + saux2 + "\n" ;
+      saux += "ZoRaYmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x5 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmax " + saux2 + "\n" ;
+      saux += "ZoRaYmax " + saux1.str() + "\n" ;
     }
   }
 //
@@ -295,50 +343,42 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     saux += "# Boite\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmin " + saux2 + "\n" ;
+      saux += "ZoRaXmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXmax " + saux2 + "\n" ;
+      saux += "ZoRaXmax " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmin " + saux2 + "\n" ;
+      saux += "ZoRaYmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYmax " + saux2 + "\n" ;
+      saux += "ZoRaYmax " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x4 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaZmin " + saux2 + "\n" ;
+      saux += "ZoRaZmin " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x5 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaZmax " + saux2 + "\n" ;
+      saux += "ZoRaZmax " + saux1.str() + "\n" ;
     }
   }
 //
 // Cas du disque
 //
-  else if ( ZoneType == 31 or ZoneType == 61 )
+  else if ( ZoneType == 31 || ZoneType == 61 )
   {
     saux += "# Sphere\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXCen " + saux2 + "\n" ;
+      saux += "ZoRaXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYCen " + saux2 + "\n" ;
+      saux += "ZoRaYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x6 ;
@@ -349,22 +389,19 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     if ( ZoneType == 61 )
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x8 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaRayI " + saux2 + "\n" ;
+      saux += "ZoRaRayI " + saux1.str() + "\n" ;
     }
   }
-  else if ( ZoneType == 32 or ZoneType == 62 )
+  else if ( ZoneType == 32 || ZoneType == 62 )
   {
     saux += "# Sphere\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXCen " + saux2 + "\n" ;
+      saux += "ZoRaXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYCen " + saux2 + "\n" ;
+      saux += "ZoRaYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x6 ;
@@ -375,22 +412,19 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     if ( ZoneType == 62 )
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x8 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaRayI " + saux2 + "\n" ;
+      saux += "ZoRaRayI " + saux1.str() + "\n" ;
     }
   }
-  else if ( ZoneType == 33 or ZoneType == 63 )
+  else if ( ZoneType == 33 || ZoneType == 63 )
   {
     saux += "# Sphere\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXCen " + saux2 + "\n" ;
+      saux += "ZoRaXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYCen " + saux2 + "\n" ;
+      saux += "ZoRaYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x6 ;
@@ -401,8 +435,7 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     if ( ZoneType == 63 )
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x8 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaRayI " + saux2 + "\n" ;
+      saux += "ZoRaRayI " + saux1.str() + "\n" ;
     }
   }
 //
@@ -413,61 +446,51 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     saux += "# Sphere\n" ;
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXCen " + saux2 + "\n" ;
+      saux += "ZoRaXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYCen " + saux2 + "\n" ;
+      saux += "ZoRaYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaZCen " + saux2 + "\n" ;
+      saux += "ZoRaZCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaRayo " + saux2 + "\n" ;
+      saux += "ZoRaRayo " + saux1.str() + "\n" ;
     }
   }
 //
 // Cas du cylindre ou du tuyau
 //
-  else if ( ZoneType == 5 or ZoneType == 7 )
+  else if ( ZoneType == 5 || ZoneType == 7 )
   {
     if ( ZoneType == 5 ) { saux += "# Cylindre\n" ; }
     else                 { saux += "# Tuyau\n" ; }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXBas " + saux2 + "\n" ;
+      saux += "ZoRaXBas " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYBas " + saux2 + "\n" ;
+      saux += "ZoRaYBas " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaZBas " + saux2 + "\n" ;
+      saux += "ZoRaZBas " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaXAxe " + saux2 + "\n" ;
+      saux += "ZoRaXAxe " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x4 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaYAxe " + saux2 + "\n" ;
+      saux += "ZoRaYAxe " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x5 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaZAxe " + saux2 + "\n" ;
+      saux += "ZoRaZAxe " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x6 ;
@@ -477,14 +500,12 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
     }
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x7 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaHaut " + saux2 + "\n" ;
+      saux += "ZoRaHaut " + saux1.str() + "\n" ;
     }
     if ( ZoneType == 7 )
     { std::stringstream saux1 ;
       saux1 << NumeZone << " " << x8 ;
-      saux2 = saux1.str() ;
-      saux += "ZoRaRayI " + saux2 + "\n" ;
+      saux += "ZoRaRayI " + saux1.str() + "\n" ;
     }
   }
 //
@@ -492,8 +513,7 @@ void HomardDriver::TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0
 //
 //   MESSAGE("A la fin de HomardDriver::TexteZone, _Texte ="<<_Texte);
 }
-
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteField( const std::string FieldName, const std::string FieldFile, int TimeStep, int Rank,
                int TypeThR, double ThreshR, int TypeThC, double ThreshC,
                int UsField, int UsCmpI )
@@ -520,6 +540,7 @@ void HomardDriver::TexteField( const std::string FieldName, const std::string Fi
       saux2 = saux1.str() ;
       _Texte += "CCNumPTI " + saux2  + "\n" ;
     }
+    if ( Rank >= 0 )
     {
       std::stringstream saux1 ;
       saux1 << Rank ;
@@ -535,12 +556,13 @@ void HomardDriver::TexteField( const std::string FieldName, const std::string Fi
   { saux = "HRe" ; }
   if ( TypeThR == 3 )
   { saux = "HPE" ; }
+  if ( TypeThR == 4 )
+  { saux = "HMS" ; }
   if ( saux != " " )
   {
     std::stringstream saux1 ;
     saux1 << ThreshR ;
-    saux2 = saux1.str() ;
-    _Texte += "Seuil" + saux + " " + saux2  + "\n" ;
+    _Texte += "Seuil" + saux + " " + saux1.str()  + "\n" ;
   }
 //
   saux = " " ;
@@ -550,12 +572,13 @@ void HomardDriver::TexteField( const std::string FieldName, const std::string Fi
   { saux = "BRe" ; }
   if ( TypeThC == 3 )
   { saux = "BPE" ; }
+  if ( TypeThC == 4 )
+  { saux = "BMS" ; }
   if ( saux != " " )
   {
     std::stringstream saux1 ;
     saux1 << ThreshC ;
-    saux2 = saux1.str() ;
-    _Texte += "Seuil" + saux + " " + saux2  + "\n" ;
+    _Texte += "Seuil" + saux + " " + saux1.str()  + "\n" ;
   }
 //
   saux = " " ;
@@ -574,14 +597,13 @@ void HomardDriver::TexteField( const std::string FieldName, const std::string Fi
   if ( UsCmpI == 1 )
   { saux = "INFINI" ; }
   if ( UsCmpI == 2 )
-  { saux = "V_RELATIVE" ; }
+  { saux = "RELATIF" ; }
   if ( saux != " " )
   {
     _Texte += "CCUsCmpI " + saux  + "\n" ;
   }
 }
-
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteGroup( const std::string GroupName )
 {
   MESSAGE("TexteGroup, GroupName = "<<GroupName);
@@ -589,7 +611,9 @@ void HomardDriver::TexteGroup( const std::string GroupName )
   _Texte += "CCGroAda \"" + GroupName  + "\"\n" ;
 //
 }
-////=============================================================================
+//===============================================================================
+// D. Les frontieres
+//===============================================================================
 void HomardDriver::TexteBoundaryOption( int BoundaryOption )
 {
   MESSAGE("TexteBoundaryOption, BoundaryOption = "<<BoundaryOption);
@@ -602,17 +626,18 @@ void HomardDriver::TexteBoundaryOption( int BoundaryOption )
   _Texte += "SuivFron " + saux + "\n" ;
 //
 }
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteBoundaryDi(  const std::string MeshName, const std::string MeshFile )
 {
   MESSAGE("TexteBoundaryDi, MeshName  = "<<MeshName);
   MESSAGE("TexteBoundaryDi, MeshFile  = "<<MeshFile);
 //
+  _Texte += "#\n# Frontiere discrete\n" ;
   _Texte += "CCNoMFro \"" + MeshName + "\"\n" ;
   _Texte += "CCFronti \"" + MeshFile + "\"\n" ;
 //
 }
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteBoundaryDiGr(  const std::string GroupName )
 {
   MESSAGE("TexteBoundaryDiGr, GroupName  = "<<GroupName);
@@ -620,13 +645,13 @@ void HomardDriver::TexteBoundaryDiGr(  const std::string GroupName )
   _Texte += "CCGroFro \"" + GroupName + "\"\n" ;
 //
 }
-////=============================================================================
-void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6 )
+//===============================================================================
+void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 )
 {
   MESSAGE("TexteBoundaryAn, NameBoundary = "<<NameBoundary);
 //   MESSAGE("TexteBoundaryAn, NumeBoundary = "<<NumeBoundary);
   MESSAGE("TexteBoundaryAn, BoundaryType = "<<BoundaryType);
-//   MESSAGE("TexteBoundaryAn, coor         = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6);
+//   MESSAGE("TexteBoundaryAn, coor         = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6","<<x7);
 //
   std::string saux, saux2 ;
 //
@@ -640,21 +665,23 @@ void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoun
   { saux += "# Cylindre\n" ; }
   if ( BoundaryType == 2 )
   { saux += "# Sphere\n" ; }
+  if ( BoundaryType == 3 || BoundaryType == 4 )
+  { saux += "# Cone\n" ; }
+  if ( BoundaryType == 5 )
+  { saux += "# Tore\n" ; }
 //
 // Le nom de la frontiere
 //
   { std::stringstream saux1 ;
     saux1 << NumeBoundary ;
-    saux2 = saux1.str() ;
-    saux += "FANom " + saux2 + " \"" + NameBoundary + "\"\n" ;
+    saux += "FANom " + saux1.str() + " \"" + NameBoundary + "\"\n" ;
   }
 //
 // Type de frontiere
 //
   { std::stringstream saux1 ;
     saux1 << NumeBoundary << " " << BoundaryType ;
-    saux2 = saux1.str() ;
-    saux += "FAType " + saux2 + "\n" ;
+    saux += "FAType " + saux1.str() + "\n" ;
   }
 //
 // Cas du cylindre
@@ -664,37 +691,31 @@ void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoun
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x0 ;
       saux2 = saux1.str() ;
-      saux += "FAXCen " + saux2 + "\n" ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "FAYCen " + saux2 + "\n" ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "FAZCen " + saux2 + "\n" ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "FAXAxe " + saux2 + "\n" ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x4 ;
-      saux2 = saux1.str() ;
-      saux += "FAYAxe " + saux2 + "\n" ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x5 ;
-      saux2 = saux1.str() ;
-      saux += "FAZAxe " + saux2 + "\n" ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
     }
-     { std::stringstream saux1 ;
+    { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x6 ;
-      saux2 = saux1.str() ;
-      saux += "FARayon " + saux2 + "\n" ;
+      saux += "FARayon " + saux1.str() + "\n" ;
     }
  }
 //
@@ -704,30 +725,137 @@ void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoun
   {
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x0 ;
-      saux2 = saux1.str() ;
-      saux += "FAXCen " + saux2 + "\n" ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x1 ;
-      saux2 = saux1.str() ;
-      saux += "FAYCen " + saux2 + "\n" ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x2 ;
-      saux2 = saux1.str() ;
-      saux += "FAZCen " + saux2 + "\n" ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
     }
     { std::stringstream saux1 ;
       saux1 << NumeBoundary << " " << x3 ;
-      saux2 = saux1.str() ;
-      saux += "FARayon " + saux2 + "\n" ;
+      saux += "FARayon " + saux1.str() + "\n" ;
     }
   }
+//
+// Cas du cone defini par un axe et un angle
+//
+  if ( BoundaryType == 3 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FAAngle " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+ }
+//
+// Cas du cone defini par les 2 rayons
+//
+  if ( BoundaryType == 4 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FARayon " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAXCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAYCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FAZCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x7 ;
+      saux += "FARayon2 " + saux1.str() + "\n" ;
+    }
+ }
+//
+// Cas du tore
+//
+  if ( BoundaryType == 5 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux2 = saux1.str() ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FARayon  " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x7 ;
+      saux += "FARayon2 " + saux1.str() + "\n" ;
+    }
+ }
 //
   _Texte += saux + "#\n" ;
 //
 }
-////=============================================================================
+//===============================================================================
 void HomardDriver::TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName )
 {
   MESSAGE("TexteBoundaryAnGr, NameBoundary  = "<<NameBoundary);
@@ -748,59 +876,80 @@ void HomardDriver::TexteBoundaryAnGr( const std::string NameBoundary, int NumeBo
   _Texte += saux + "#\n" ;
 //
 }
-////=============================================================================
-void HomardDriver::TexteFieldInterp( int TypeFieldInterp, const std::string FieldFile, const std::string MeshFile, int TimeStep, int Rank )
+//===============================================================================
+// E. Les interpolations
+//===============================================================================
+// Les fichiers d'entree et de sortie des champs a interpoler
+void HomardDriver::TexteFieldInterp( const std::string FieldFile, const std::string MeshFile )
 {
-  MESSAGE("TexteFieldInterp, TypeFieldInterp = "<<TypeFieldInterp);
   MESSAGE("TexteFieldInterp, FieldFile = "<<FieldFile<<", MeshFile = "<<MeshFile);
-  MESSAGE("TexteFieldInterp, TimeStep = "<<TimeStep<<", Rank = "<<Rank);
 //
-// Type d'interpolation
+  _Texte += "#\n# Interpolations des champs\n" ;
 //
-  _Texte += "# Interpolations des champs\n" ;
+// Fichier en entree
   _Texte += "CCSolN__ \"" + FieldFile + "\"\n" ;
+// Fichier en sortie
   _Texte += "CCSolNP1 \"" + MeshFile  + "\"\n" ;
-  if ( TypeFieldInterp == 1 )
-  {
-    _Texte += "CCChaTou oui\n" ;
-  }
-//
-  _TimeStep = TimeStep ;
-  _Rank = Rank ;
 //
 //  std::cerr << "A la fin de TexteFieldInterp _Texte ="<<_Texte << std::endl;
 }
-////=============================================================================
-void HomardDriver::TexteFieldInterpName( int NumeChamp, const std::string FieldName)
+//===============================================================================
+// Tous les champs sont a interpoler
+void HomardDriver::TexteFieldInterpAll( )
+{
+  MESSAGE("TexteFieldInterpAll");
+//
+  _Texte += "CCChaTou oui\n" ;
+}
+//===============================================================================
+// Ecrit les caracteristiques de chaque interpolation sous la forme :
+//   CCChaNom 1 "DEPL"     ! Nom du 1er champ a interpoler
+//   CCChaTIn 1 0          ! Mode d'interpolation : automatique
+//   CCChaNom 2 "VOLUME"   ! Nom du 2nd champ a interpoler
+//   CCChaTIn 2 1          ! Mode d'interpolation : une variable extensive
+//   CCChaPdT 2 14         ! Pas de temps 14
+//   CCChaNuO 2 14         ! Numero d'ordre 14
+//   etc.
+//
+// NumeChamp : numero d'ordre du champ a interpoler
+// FieldName : nom du champ
+// TypeInterp : type d'interpolation
+// TimeStep : pas de temps retenu (>0 si pas de precision)
+// Rank : numero d'ordre retenu
+//
+void HomardDriver::TexteFieldInterpNameType( int NumeChamp, const std::string FieldName, const std::string TypeInterp, int TimeStep, int Rank)
 {
-  MESSAGE("TexteFieldInterpName, NumeChamp = "<<NumeChamp<<", FieldName = "<<FieldName);
+  MESSAGE("TexteFieldInterpNameType, NumeChamp = "<<NumeChamp<<", FieldName = "<<FieldName<<", TypeInterp = "<<TypeInterp);
+  MESSAGE("TexteFieldInterpNameType, TimeStep = "<<TimeStep<<", Rank = "<<Rank);
+// Numero d'ordre du champ a interpoler
   std::stringstream saux1 ;
-  saux1 << NumeChamp+1 ;
+  saux1 << NumeChamp ;
   std::string saux = saux1.str() ;
+// Nom du champ
   _Texte +="CCChaNom " + saux + " \"" + FieldName + "\"\n" ;
+// Type d'interpolation pour le champ
+  _Texte +="CCChaTIn " + saux + " " + TypeInterp + "\n" ;
 //
-  MESSAGE("TexteFieldInterpName, _TimeStep = "<<_TimeStep<<", _Rank = "<<_Rank);
-  if ( _TimeStep >= 0 )
+  if ( TimeStep >= 0 )
   {
     {
       std::stringstream saux1 ;
-      saux1 << _TimeStep ;
-      std::string saux2 = saux1.str() ;
-      _Texte += "CCChaPdT " + saux + " " + saux2  + "\n" ;
+      saux1 << TimeStep ;
+      _Texte += "CCChaPdT " + saux + " " + saux1.str()  + "\n" ;
     }
     {
       std::stringstream saux1 ;
-      saux1 << _Rank ;
-      std::string saux2 = saux1.str() ;
-      _Texte += "CCChaNuO " + saux + " " + saux2  + "\n" ;
+      saux1 << Rank ;
+      _Texte += "CCChaNuO " + saux + " " + saux1.str()  + "\n" ;
     }
   }
 }
-////=============================================================================
-void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit )
+//===============================================================================
+// F. Les options avancees
+//===============================================================================
+void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit, int ExtraOutput )
 {
-  MESSAGE("TexteAdvanced, Pyram ="<<Pyram<<", NivMax ="<<NivMax<<", DiamMin ="<<DiamMin<<", AdapInit ="<<AdapInit);
-  std::string saux ;
+  MESSAGE("TexteAdvanced, Pyram ="<<Pyram<<", NivMax ="<<NivMax<<", DiamMin ="<<DiamMin<<", AdapInit ="<<AdapInit<<", ExtraOutput ="<<ExtraOutput);
 
   if ( Pyram > 0 )
   {
@@ -812,8 +961,7 @@ void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int Ada
     _Texte += "# Niveaux extremes\n" ;
     { std::stringstream saux1 ;
       saux1 << NivMax ;
-      std::string saux2 = saux1.str() ;
-      _Texte += "NiveauMa " + saux2 + "\n" ;
+      _Texte += "NiveauMa " + saux1.str() + "\n" ;
     }
   }
   if ( DiamMin > 0 )
@@ -821,8 +969,7 @@ void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int Ada
     _Texte += "# Diametre minimal\n" ;
     { std::stringstream saux1 ;
       saux1 << DiamMin ;
-      std::string saux2 = saux1.str() ;
-      _Texte += "DiametMi " + saux2  + "\n" ;
+      _Texte += "DiametMi " + saux1.str()  + "\n" ;
     }
   }
   if ( AdapInit != 0 )
@@ -834,42 +981,101 @@ void HomardDriver::TexteAdvanced( int Pyram, int NivMax, double DiamMin, int Ada
     _Texte += " des regions sans indicateur\n" ;
     { std::stringstream saux1 ;
       saux1 << AdapInit ;
-      std::string saux2 = saux1.str() ;
-      _Texte += "AdapInit " + saux2 + "\n" ;
+      _Texte += "AdapInit " + saux1.str() + "\n" ;
     }
   }
+  if ( ExtraOutput % 2 == 0 )
+  {
+    _Texte += "# Sortie des niveaux de raffinement\n" ;
+    _Texte += "NCNiveau NIVEAU\n" ;
+  }
+  if ( ExtraOutput % 3 == 0 )
+  {
+    _Texte += "# Sortie des qualités des mailles\n" ;
+    _Texte += "NCQualit QUAL\n" ;
+  }
+  if ( ExtraOutput % 5 == 0 )
+  {
+    _Texte += "# Sortie des diamètres des mailles\n" ;
+    _Texte += "NCDiamet DIAM\n" ;
+  }
+  if ( ExtraOutput % 7 == 0 )
+  {
+    _Texte += "# Sortie des parents des mailles\n" ;
+    _Texte += "NCParent PARENT\n" ;
+  }
+  if ( ExtraOutput % 11 == 0 )
+  {
+    _Texte += "# Volumes voisins par recollement\n" ;
+    _Texte += "NCVoisRc Voisin-Recollement\n" ;
+  }
 }
+//===============================================================================
+// G. Les messages
+//===============================================================================
+void HomardDriver::TexteInfoCompute( int MessInfo )
+{
+  MESSAGE("TexteAdvanced, MessInfo ="<<MessInfo);
 
-////=============================================================================
+  if ( MessInfo != 0 )
+  {
+     _Texte += "# Messages d'informations\n" ;
+    { std::stringstream saux1 ;
+      saux1 << MessInfo ;
+      _Texte += "MessInfo " + saux1.str()  + "\n" ;
+    }
+   }
+}
+//===============================================================================
 void HomardDriver::CreeFichier( )
 {
 //
-  _NomFichierConf = _NomFichierConfBase + "." + _siter + ".vers." + _siterp1 ;
+  if ( _siter != _siterp1 )
+  { _NomFichierConf = _NomFichierConfBase + "." + _siter + ".vers." + _siterp1 ; }
+  else
+  { _NomFichierConf = _NomFichierConfBase + "." + _siter + ".info" ; }
 //
-  std::ofstream FicConf(_NomFichierConf.c_str(), std::ios::out ) ;
-  if (FicConf.is_open() == true)
-  {
-    FicConf << _Texte << std::endl ;
-  }
-  FicConf.close() ;
+  std::ofstream Fic(_NomFichierConf.c_str(), std::ios::out ) ;
+  if (Fic.is_open() == true) { Fic << _Texte << std::endl ; }
+  Fic.close() ;
 //
 }
-
-////=============================================================================
-int HomardDriver::ExecuteHomard()
+//===============================================================================
+// Creation du fichier de donnees pour l'information
+//===============================================================================
+void HomardDriver::CreeFichierDonn( )
 {
+//
+  MESSAGE("CreeFichierDonn");
+  _NomFichierDonn = "info.donn" ;
+//
+  std::string data ;
+  data  = "0\n" ;
+  data += "0\n" ;
+  data += "q\n" ;
+  std::ofstream Fic(_NomFichierDonn.c_str(), std::ios::out ) ;
+  if (Fic.is_open() == true) { Fic << data << std::endl ; }
+  Fic.close() ;
+//
+}
+//===============================================================================
+int HomardDriver::ExecuteHomard(int option)
+{
+  MESSAGE("ExecuteHomard, avec option = "<<option);
+  std::string commande ;
+  int codret ;
 // Copie des Fichiers HOMARD
-  std::string commande= "cp " + _NomFichierConf + " " + _NomFichierConfBase ;
-  system(commande.c_str());
+  commande = "cp " + _NomFichierConf + " " + _NomFichierConfBase ;
+  codret = system(commande.c_str()) ;
 
-  MESSAGE("ExecuteHomard");
-  int codret = system(_HOMARD_Exec.c_str()) ;
-  if ( codret != 0)
+// Execution de HOMARD
+  if ( codret == 0)
   {
-      // GERALD -- QMESSAGE BOX
-      MESSAGE ( "Erreur en executant HOMARD : " << codret );
-//       ASSERT("Erreur en executant HOMARD" == 0);
+    commande = _HOMARD_Exec.c_str() ;
+    if ( _NomFichierDonn != "" ) { commande += " < " + _NomFichierDonn ; }
+    codret = system(commande.c_str());
+    if ( codret != 0) { MESSAGE ( "Erreur en executant HOMARD : " << codret ); };
+    _NomFichierDonn = "" ;
   };
-
   return codret ;
 }
index 3c1c0a0192ecb007810226738b66f4ba8db998b7..f0e4b3932c3c6617b9c844896f82b30f8f314d58 100644 (file)
@@ -1,11 +1,11 @@
-//  HOMARD HOMARD : implementaion of HOMARD idl descriptions
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
 //
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-# ifndef __HOMARDDRIVER_H__
-# define __HOMARDDRIVER_H__
+# ifndef _HOMARDDRIVER_HXX_
+# define _HOMARDDRIVER_HXX_
+
+#include "HOMARD.hxx"
 
 #include <iostream>
 #include <fstream>
 
-class HomardDriver
+class HOMARDIMPL_EXPORT HomardDriver
 {
 public:
   HomardDriver(const std::string siter, const std::string siterp1);
   ~HomardDriver();
   //
-  void        TexteInit( const std::string DirCompute, const std::string DirComputePa, const std::string MessFile );
+  void        TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue );
+  void        TexteInfo( int TypeBila, int NumeIter );
+  void        CreeFichierDonn();
+  void        TexteAdap( int ExtType );
   void        CreeFichier();
   void        TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres );
+  void        TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres );
   void        TexteConfRaffDera( int ConfType, int TypeAdap, int TypeRaff, int TypeDera );
   void        TexteZone( int NumeZone, int ZoneType, int TypeUse, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7, double x8 );
   void        TexteGroup( const std::string GroupName );
@@ -46,32 +52,24 @@ public:
   void        TexteBoundaryOption( int BoundaryOption );
   void        TexteBoundaryDi( const std::string MeshName, const std::string MeshFile );
   void        TexteBoundaryDiGr( const std::string GroupName );
-  void        TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6 );
+  void        TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 );
   void        TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName );
 
-  void        TexteFieldInterp( int TypeFieldInterp, const std::string FieldFile, const std::string MeshFile,
-                                int TimeStep, int Rank );
-  void        TexteFieldInterpName( int NumeChamp, const std::string FieldName);
-  void        TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit);
-  void        CloseFichier();
+  void        TexteFieldInterp( const std::string FieldFile, const std::string MeshFile );
+  void        TexteFieldInterpAll();
+  void        TexteFieldInterpNameType( int NumeChamp, const std::string FieldName, const std::string TypeInterp, int TimeStep, int Rank );
+  void        TexteAdvanced( int Pyram, int NivMax, double DiamMin, int AdapInit, int LevelOutput );
+  void        TexteInfoCompute( int MessInfo );
   //
-  int         ExecuteHomard();
+  int         ExecuteHomard(int option);
   //
-  bool        LireFichier();
-  bool        EcrireFichier();
-  void        SetTexte( const std::string texte );
-  std::string GetTexte();
-  std::string GetFichierInfo();
-  std::string GetFichierBasic();
-  std::string GetFichierResultMed();
-  std::string GetFichierHomard();
-  int         GetFichierNumeroIter();
 
 public:
   std::string _HOMARD_Exec;
   std::string _NomDir;
   std::string _NomFichierConfBase;
   std::string _NomFichierConf;
+  std::string _NomFichierDonn;
   std::string _siter;
   std::string _siterp1;
   std::string _Texte;
@@ -79,8 +77,6 @@ public:
   int         _Rank;
   bool _bLu;
 
-private :
-  std::string GetStringInTexte( std::string chaineCherchee, int longueur = 9 );
 };
 
-# endif         /* # ifndef __HOMARDDRIVER_H__ */
+# endif         /* # ifndef _HOMARDDRIVER_HXX_ */
diff --git a/src/HOMARD/Makefile.am b/src/HOMARD/Makefile.am
deleted file mode 100755 (executable)
index 49ef0d0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : , CEA
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-# header files 
-salomeinclude_HEADERS = \
-       HOMARD_Cas.hxx \
-       HOMARD_Boundary.hxx \
-       HOMARD_Hypothesis.hxx \
-       HOMARD_Iteration.hxx \
-       HOMARD_Zone.hxx \
-       HOMARD_Gen.hxx \
-       HOMARD_DriverTools.hxx \
-       HomardDriver.hxx
-
-# Libraries targets
-lib_LTLIBRARIES = libHOMARDImpl.la
-dist_libHOMARDImpl_la_SOURCES = \
-       HOMARD_Cas.cxx \
-       HOMARD_Boundary.cxx \
-       HOMARD_Hypothesis.cxx \
-       HOMARD_Iteration.cxx \
-       HOMARD_Zone.cxx \
-       HOMARD_Gen.cxx \
-       HOMARD_DriverTools.cxx \
-       HomardDriver.cxx
-
-libHOMARDImpl_la_CPPFLAGS = \
-       $(KERNEL_CXXFLAGS)
-
-libHOMARDImpl_la_LDFLAGS = \
-       $(KERNEL_LDFLAGS) \
-       -lSALOMELocalTrace
-
-# check_PROGRAMS = testhomard
-# 
-# TESTS = $(check_PROGRAMS)
-# 
-# testhomard_SOURCES = testhomard.cxx
-# 
-# testhomard_LDADD = libHOMARDImpl.la
diff --git a/src/HOMARD/YACSDriver.cxx b/src/HOMARD/YACSDriver.cxx
new file mode 100644 (file)
index 0000000..c7c5725
--- /dev/null
@@ -0,0 +1,668 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// Pilote l'ecriture du fichier xml pour lancer un schema YACS
+
+#include <cstring>
+#ifndef WIN32
+#include <unistd.h>
+#endif
+#include <sys/stat.h>
+
+#include "YACSDriver.hxx"
+#include "HOMARD.hxx"
+#include "Utils_SALOME_Exception.hxx"
+#include "utilities.h"
+
+//=============================================================================
+//=============================================================================
+YACSDriver::YACSDriver(const std::string XMLFile, const std::string DirName):
+  _XMLFile( "" ), _DirName( "" ),
+  _Texte( "" ),
+  _Texte_parametres( "" ),
+  _noeud_1( "CreateCase" ),
+  _bLu( false )
+{
+  MESSAGE("XMLFile = "<<XMLFile<<", DirName ="<<DirName);
+  _XMLFile = XMLFile;
+  _DirName = DirName;
+}
+//=============================================================================
+//=============================================================================
+YACSDriver::~YACSDriver()
+{
+}
+//===============================================================================
+// Ajout d'une ligne simple
+//===============================================================================
+void YACSDriver::TexteAdd( const std::string ligne )
+{
+//   MESSAGE("TexteAdd, ligne ="<<ligne);
+//
+  _Texte += ligne + "\n" ;
+//
+}
+//===============================================================================
+// Nom du fichier du maillage initial
+//===============================================================================
+void YACSDriver::Texte_DataInit_MeshFile( const std::string Meshfile )
+{
+  MESSAGE("TexteInitMeshfile, Meshfile ="<<Meshfile);
+//
+  _Texte += "         <value><string>" ;
+  _Texte += Meshfile ;
+  _Texte += "</string></value>\n" ;
+//
+}
+//===============================================================================
+// Le repertoire de calcul
+// Le script de lancement
+//===============================================================================
+void YACSDriver::Texte_Alternance_Calcul_HOMARD_Calcul( const std::string FileName )
+{
+  MESSAGE("Texte_Alternance_Calcul_HOMARD_Calcul, FileName : "<<FileName);
+//
+  int position = FileName.find_last_of( '/' ) ;
+  std::string nomfic = FileName.substr( position+1 ) ;
+  position = nomfic.find_last_of( '.' ) ;;
+  nomfic = nomfic.substr( 0, position ) ;
+  MESSAGE("nomfic : "<<nomfic) ;
+//
+  _Texte += "rep_calc = \"" + _DirName + "\"\n" ;
+  _Texte += "rep_script = os.path.dirname(\"" + FileName + "\")\n" ;
+  _Texte += "sys.path.append(rep_script)\n" ;
+  _Texte += "from " + nomfic + " import Script\n" ;
+//
+}
+//===============================================================================
+// Les options du cas
+//===============================================================================
+void YACSDriver::Texte_Iter_1_Case_Options( const std::string pythonTexte )
+{
+  MESSAGE("Texte_Iter_1_Case_Options, pythonTexte\n"<<pythonTexte);
+//
+  _Texte += "DirName = \"" + _DirName + "/HOMARD\"\n" ;
+  _Texte += "Case.SetDirName(DirName)\n" ;
+
+  Texte_python_1( pythonTexte, 1, "Case" ) ;
+//
+}
+//===============================================================================
+// La description des zones
+// ZoneType : le type de la zone
+// pythonStructure : le python correspondant a la zone
+// methode : methode associee a la creation de la zone
+// ZoneName : nom de la zone
+//===============================================================================
+std::string YACSDriver::Texte_Iter_1_Zone( int ZoneType, const std::string pythonStructure, const std::string methode, const std::string ZoneName )
+{
+  MESSAGE("Texte_Iter_1_Zone, ZoneType = "<<ZoneType<<", pythonStructure = "<<pythonStructure);
+  MESSAGE("methode = "<<methode<<", ZoneName = "<<ZoneName );
+//
+// 1. Le nom du noeud
+  std::string noeud_2 = methode + "_" + ZoneName ;
+  std::string node = "Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1." ;
+  node += noeud_2 ;
+// 2. Texte de controle : le noeud precedent est _noeud_1, le noeud courant noeud_2.
+//                        A la fin, on bascule le courant dans le precedent
+  std::string texte_control = Texte_control (_noeud_1, noeud_2, 1) ;
+  _noeud_1 = noeud_2 ;
+// 3. Definition du service
+  _Texte += "                           <service name=\"" + noeud_2 + "\">\n" ;
+  _Texte += "                              <node>Etude_Initialisation.SetCurrentStudy</node>\n" ;
+  _Texte += "                              <method>" + methode + "</method>\n" ;
+// 4. Les inports
+// 4.1. Le nom de la zone
+  _Texte += Texte_inport( "string", "ZoneName" ) ;
+   TexteParametre( node, "ZoneName", "string", ZoneName ) ;
+// 4.2. Les valeurs numeriques
+//      ATTENTION : les noms doivent etre les memes que dans Gen.xml, donc HOMARD_Gen.idl
+// 4.2.1. Decodage des valeurs
+// La chaine pythonStructure est de ce genre :
+//   CreateZoneBox( "Zone_1", 0.144, 0.216, 0.096, 0.1464, 0.076, 0.12)
+  std::string ligne = pythonStructure ;
+// On commence par ne garder que ce qui suit la premiere virgule
+  ligne = GetStringInTexte( ligne, ",", 1 );
+// On boucle pour isoler toutes les chaines dans les virgules
+  std::string lignebis ;
+  std::string x0, x1, x2, x3, x4, x5, x6, x7, x8  ;
+  int iaux = 0  ;
+  while ( ligne != lignebis )
+  {
+    lignebis = GetStringInTexte ( ligne, ",", 0 ) ;
+//     MESSAGE("lignebis = "<<lignebis );
+    if      ( iaux == 0 ) { x0 = lignebis ; }
+    else if ( iaux == 1 ) { x1 = lignebis ; }
+    else if ( iaux == 2 ) { x2 = lignebis ; }
+    else if ( iaux == 3 ) { x3 = lignebis ; }
+    else if ( iaux == 4 ) { x4 = lignebis ; }
+    else if ( iaux == 5 ) { x5 = lignebis ; }
+    else if ( iaux == 6 ) { x6 = lignebis ; }
+    else if ( iaux == 7 ) { x7 = lignebis ; }
+    ligne = GetStringInTexte( ligne, ",", 1 );
+    iaux += 1 ;
+  }
+// La derniere valeur est toujours mise dans x8
+  x8 = GetStringInTexte ( ligne, ")", 0 ) ;
+  MESSAGE("coor = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6<<","<<x7<<","<<x8);
+// 4.2. Cas du parallelepipede (2)
+  if ( ZoneType == 2 )
+  {
+    _Texte += Texte_inport( "double", "Xmini" ) ;
+    _Texte += Texte_inport( "double", "Xmaxi" ) ;
+    _Texte += Texte_inport( "double", "Ymini" ) ;
+    _Texte += Texte_inport( "double", "Ymaxi" ) ;
+    _Texte += Texte_inport( "double", "Zmini" ) ;
+    _Texte += Texte_inport( "double", "Zmaxi" ) ;
+    TexteParametre( node, "Xmini", "double", x0 ) ;
+    TexteParametre( node, "Xmaxi", "double", x1 ) ;
+    TexteParametre( node, "Ymini", "double", x2 ) ;
+    TexteParametre( node, "Ymaxi", "double", x3 ) ;
+    TexteParametre( node, "Zmini", "double", x4 ) ;
+    TexteParametre( node, "Zmaxi", "double", x8 ) ;
+  }
+//
+// 4.2. Cas du rectangle (11, 12, 13)
+  else if ( ( ZoneType > 10 ) && ( ZoneType < 14 ) )
+  {
+    _Texte += Texte_inport( "double", "Umini" ) ;
+    _Texte += Texte_inport( "double", "Umaxi" ) ;
+    _Texte += Texte_inport( "double", "Vmini" ) ;
+    _Texte += Texte_inport( "double", "Vmaxi" ) ;
+    _Texte += Texte_inport( "long", "Orient" ) ;
+    TexteParametre( node, "Umini", "double", x0 ) ;
+    TexteParametre( node, "Umaxi", "double", x1 ) ;
+    TexteParametre( node, "Vmini", "double", x2 ) ;
+    TexteParametre( node, "Vmaxi", "double", x3 ) ;
+    TexteParametre( node, "Orient", "int", x8 ) ;
+  }
+//
+// 4.2. Cas du disque (31, 32, 33) ou du disque perce (61, 62, 63)
+  else if ( ( ( ZoneType > 30 ) && ( ZoneType < 34 ) ) || ( ( ZoneType > 60 ) && ( ZoneType < 64 ) ) )
+  {
+    _Texte += Texte_inport( "double", "Ucentre" ) ;
+    _Texte += Texte_inport( "double", "Vcentre" ) ;
+    _Texte += Texte_inport( "double", "Radius" ) ;
+    TexteParametre( node, "Ucentre", "double", x0 ) ;
+    TexteParametre( node, "Vcentre", "double", x1 ) ;
+    TexteParametre( node, "Radius", "double", x2 ) ;
+    if ( ZoneType > 60 )
+    {
+      _Texte += Texte_inport( "double", "InternalRadius" ) ;
+      TexteParametre( node, "InternalRadius", "double", x3 ) ;
+    }
+    _Texte += Texte_inport( "long", "Orient" ) ;
+    TexteParametre( node, "Orient", "int", x8 ) ;
+  }
+//
+// 4.2. Cas de la sphere (4)
+  else if ( ZoneType == 4 )
+  {
+    _Texte += Texte_inport( "double", "Xcentre" ) ;
+    _Texte += Texte_inport( "double", "Ycentre" ) ;
+    _Texte += Texte_inport( "double", "Zcentre" ) ;
+    _Texte += Texte_inport( "double", "Radius" ) ;
+    TexteParametre( node, "Xcentre", "double", x0 ) ;
+    TexteParametre( node, "Ycentre", "double", x1 ) ;
+    TexteParametre( node, "Zcentre", "double", x2 ) ;
+    TexteParametre( node, "Radius", "double", x8 ) ;
+  }
+//
+// 4.2. Cas du cylindre (5) ou du tuyau (7)
+  else if ( ZoneType == 5 || ZoneType == 7 )
+  {
+    _Texte += Texte_inport( "double", "Xcentre" ) ;
+    _Texte += Texte_inport( "double", "Ycentre" ) ;
+    _Texte += Texte_inport( "double", "Zcentre" ) ;
+    _Texte += Texte_inport( "double", "Xaxis" ) ;
+    _Texte += Texte_inport( "double", "Yaxis" ) ;
+    _Texte += Texte_inport( "double", "Zaxis" ) ;
+    _Texte += Texte_inport( "double", "Radius" ) ;
+    _Texte += Texte_inport( "double", "Height" ) ;
+    TexteParametre( node, "Xcentre", "double", x0 ) ;
+    TexteParametre( node, "Ycentre", "double", x1 ) ;
+    TexteParametre( node, "Zcentre", "double", x2 ) ;
+    TexteParametre( node, "Xaxis", "double", x3 ) ;
+    TexteParametre( node, "Yaxis", "double", x4 ) ;
+    TexteParametre( node, "Zaxis", "double", x5 ) ;
+    TexteParametre( node, "Radius", "double", x6 ) ;
+    if ( ZoneType == 5 )
+    {
+      TexteParametre( node, "Height", "double", x8 ) ;
+    }
+    else
+    {
+      _Texte += Texte_inport( "double", "InternalRadius" ) ;
+      TexteParametre( node, "Height", "double", x7 ) ;
+      TexteParametre( node, "InternalRadius", "double", x8 ) ;
+    }
+  }
+//
+// 4.2. Erreur
+  else
+  { VERIFICATION("Type de zone inconnu." == 0); }
+
+//
+// 5. La fin
+  _Texte += "                              <outport name=\"return\" type=\"HOMARD_Zone\"/>\n" ;
+  _Texte += "                           </service>\n" ;
+//
+  return texte_control ;
+//
+}
+//===============================================================================
+// La description des frontieres
+// BoundaryType : le type de la frontiere
+// pythonStructure : le python correspondant a la frontiere
+// methode : methode associee a la creation de la frontiere
+// BoundaryName : nom de la frontiere
+// MeshName : nom du maillage dans le cas d'une frontiere discrete
+// MeshFile : nom du fichier du maillage dans le cas d'une frontiere discrete
+//===============================================================================
+std::string YACSDriver::Texte_Iter_1_Boundary( int BoundaryType, const std::string pythonStructure, const std::string methode, const std::string BoundaryName, const std::string MeshName, const std::string MeshFile )
+{
+  MESSAGE("Texte_Iter_1_Boundary, BoundaryType = "<<BoundaryType<<", pythonStructure = "<<pythonStructure);
+  MESSAGE("methode = "<<methode<<", BoundaryName = "<<BoundaryName );
+  if (BoundaryType == 0) { MESSAGE("MeshName = "<<MeshName<<", MeshFile = "<<MeshFile ); }
+//
+// 1. Le nom du noeud
+  std::string noeud_2 = methode + "_" + BoundaryName ;
+  std::string node = "Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1." ;
+  node += noeud_2 ;
+// 2. Texte de controle : le noeud precedent est _noeud_1, le noeud courant noeud_2.
+//                        A la fin, on bascule le courant dans le precedent
+  std::string texte_control = Texte_control (_noeud_1, noeud_2, 1) ;
+  _noeud_1 = noeud_2 ;
+// 3. Definition du service
+  _Texte += "                           <service name=\"" + noeud_2 + "\">\n" ;
+  _Texte += "                              <node>Etude_Initialisation.SetCurrentStudy</node>\n" ;
+  _Texte += "                              <method>" + methode + "</method>\n" ;
+// 4. Les inports
+//    ATTENTION : les noms doivent etre les memes que dans Gen.xml, donc HOMARD_Gen.idl
+// 4.1. Le nom de la frontiere
+  _Texte += Texte_inport( "string", "BoundaryName" ) ;
+  TexteParametre( node, "BoundaryName", "string", BoundaryName ) ;
+// 4.2. Cas d une frontiere discrete
+  if (BoundaryType == 0)
+  {
+    _Texte += Texte_inport( "string", "MeshName" ) ;
+    TexteParametre( node, "MeshName", "string", MeshName ) ;
+    _Texte += Texte_inport( "string", "FileName" ) ;
+    TexteParametre( node, "FileName", "string", MeshFile ) ;
+  }
+// 4.3. Cas d'une frontiere analytique : les valeurs numeriques
+  else
+  {
+// 4.3.1. Decodage des valeurs
+// La chaine pythonStructure est de ce genre :
+//   CreateBoundaryCylinder('cyl_2', 17.5, -2.5, -12.5, -100., -75., -25., 50.)
+//   CreateBoundaryDi("intersection", "PIQUAGE", "/scratch/D68518/Salome/script/sfr_2d_piquage.fr.med")
+    std::string ligne = pythonStructure ;
+// On commence par ne garder que ce qui suit la premiere virgule
+    ligne = GetStringInTexte( ligne, ",", 1 );
+// On boucle pour isoler toutes les chaines dans les virgules
+    std::string lignebis ;
+    std::string x0, x1, x2, x3, x4, x5, x6, x7  ;
+    int iaux = 0  ;
+    while ( ligne != lignebis )
+    {
+      lignebis = GetStringInTexte ( ligne, ",", 0 ) ;
+//     MESSAGE("lignebis = "<<lignebis );
+      if      ( iaux == 0 ) { x0 = lignebis ; }
+      else if ( iaux == 1 ) { x1 = lignebis ; }
+      else if ( iaux == 2 ) { x2 = lignebis ; }
+      else if ( iaux == 3 ) { x3 = lignebis ; }
+      else if ( iaux == 4 ) { x4 = lignebis ; }
+      else if ( iaux == 5 ) { x5 = lignebis ; }
+      else if ( iaux == 6 ) { x6 = lignebis ; }
+      ligne = GetStringInTexte( ligne, ",", 1 );
+      iaux += 1 ;
+    }
+// La derniere valeur est toujours mise dans x7
+    x7 = GetStringInTexte ( ligne, ")", 0 ) ;
+    MESSAGE("Valeurs = "<< x0<<", "<<x1<< ", "<< x2<< ", "<< x3<<", "<<x4<<", "<<x5<<", "<<x6<<", x7"<<x7);
+//
+// 4.3.2. Cas du cylindre (1)
+    if ( BoundaryType == 1 )
+    {
+      _Texte += Texte_inport( "double", "Xcentre" ) ;
+      _Texte += Texte_inport( "double", "Ycentre" ) ;
+      _Texte += Texte_inport( "double", "Zcentre" ) ;
+      _Texte += Texte_inport( "double", "Xaxis" ) ;
+      _Texte += Texte_inport( "double", "Yaxis" ) ;
+      _Texte += Texte_inport( "double", "Zaxis" ) ;
+      _Texte += Texte_inport( "double", "Radius" ) ;
+      TexteParametre( node, "Xcentre", "double", x0 ) ;
+      TexteParametre( node, "Ycentre", "double", x1 ) ;
+      TexteParametre( node, "Zcentre", "double", x2 ) ;
+      TexteParametre( node, "Xaxis", "double", x3 ) ;
+      TexteParametre( node, "Yaxis", "double", x4 ) ;
+      TexteParametre( node, "Zaxis", "double", x5 ) ;
+      TexteParametre( node, "Radius", "double", x7 ) ;
+    }
+//
+// 4.3.3. Cas de la sphere (2)
+    else if ( BoundaryType == 2 )
+    {
+      _Texte += Texte_inport( "double", "Xcentre" ) ;
+      _Texte += Texte_inport( "double", "Ycentre" ) ;
+      _Texte += Texte_inport( "double", "Zcentre" ) ;
+      _Texte += Texte_inport( "double", "Radius" ) ;
+      TexteParametre( node, "Xcentre", "double", x0 ) ;
+      TexteParametre( node, "Ycentre", "double", x1 ) ;
+      TexteParametre( node, "Zcentre", "double", x2 ) ;
+      TexteParametre( node, "Radius", "double", x7 ) ;
+    }
+//
+// 4.3.4. Cas d un cone defini par un axe et un angle
+    else if ( BoundaryType == 3 )
+    {
+      _Texte += Texte_inport( "double", "Xaxis" ) ;
+      _Texte += Texte_inport( "double", "Yaxis" ) ;
+      _Texte += Texte_inport( "double", "Zaxis" ) ;
+      _Texte += Texte_inport( "double", "Angle" ) ;
+      _Texte += Texte_inport( "double", "Xcentre" ) ;
+      _Texte += Texte_inport( "double", "Ycentre" ) ;
+      _Texte += Texte_inport( "double", "Zcentre" ) ;
+      TexteParametre( node, "Xaxis", "double", x0 ) ;
+      TexteParametre( node, "Yaxis", "double", x1 ) ;
+      TexteParametre( node, "Zaxis", "double", x2 ) ;
+      TexteParametre( node, "Angle", "double", x3 ) ;
+      TexteParametre( node, "Xcentre", "double", x4 ) ;
+      TexteParametre( node, "Ycentre", "double", x5 ) ;
+      TexteParametre( node, "Zcentre", "double", x7 ) ;
+    }
+//
+// 4.3.5. Cas d un cone defini par les 2 rayons
+    else if ( BoundaryType == 4 )
+    {
+      _Texte += Texte_inport( "double", "Xcentre1" ) ;
+      _Texte += Texte_inport( "double", "Ycentre1" ) ;
+      _Texte += Texte_inport( "double", "Zcentre1" ) ;
+      _Texte += Texte_inport( "double", "Radius1" ) ;
+      _Texte += Texte_inport( "double", "Xcentre2" ) ;
+      _Texte += Texte_inport( "double", "Ycentre2" ) ;
+      _Texte += Texte_inport( "double", "Zcentre2" ) ;
+      _Texte += Texte_inport( "double", "Radius2" ) ;
+      TexteParametre( node, "Xcentre1", "double", x0 ) ;
+      TexteParametre( node, "Ycentre1", "double", x1 ) ;
+      TexteParametre( node, "Zcentre1", "double", x2 ) ;
+      TexteParametre( node, "Radius1", "double", x3 ) ;
+      TexteParametre( node, "Xcentre2", "double", x4 ) ;
+      TexteParametre( node, "Ycentre2", "double", x5 ) ;
+      TexteParametre( node, "Zcentre2", "double", x6 ) ;
+      TexteParametre( node, "Radius2", "double", x7 ) ;
+    }
+// 4.3.6. Cas du tore (5)
+    else if ( BoundaryType == 5 )
+    {
+      _Texte += Texte_inport( "double", "Xcentre" ) ;
+      _Texte += Texte_inport( "double", "Ycentre" ) ;
+      _Texte += Texte_inport( "double", "Zcentre" ) ;
+      _Texte += Texte_inport( "double", "Xaxis" ) ;
+      _Texte += Texte_inport( "double", "Yaxis" ) ;
+      _Texte += Texte_inport( "double", "Zaxis" ) ;
+      _Texte += Texte_inport( "double", "RRev" ) ;
+      _Texte += Texte_inport( "double", "RPri" ) ;
+      TexteParametre( node, "Xcentre", "double", x0 ) ;
+      TexteParametre( node, "Ycentre", "double", x1 ) ;
+      TexteParametre( node, "Zcentre", "double", x2 ) ;
+      TexteParametre( node, "Xaxis", "double", x3 ) ;
+      TexteParametre( node, "Yaxis", "double", x4 ) ;
+      TexteParametre( node, "Zaxis", "double", x5 ) ;
+      TexteParametre( node, "RRev", "double", x6 ) ;
+      TexteParametre( node, "RPri", "double", x7 ) ;
+    }
+//
+// 4.3.7. Erreur
+    else
+    { VERIFICATION("Type de frontiere inconnu." == 0); }
+  }
+//
+// 5. La fin
+  _Texte += "                              <outport name=\"return\" type=\"HOMARD_Boundary\"/>\n" ;
+  _Texte += "                           </service>\n" ;
+//
+  return texte_control ;
+//
+}
+//===============================================================================
+// Fin du controle des enchainements de noeud dans le noeud Iter_1
+//===============================================================================
+  std::string YACSDriver::Texte_Iter_1_control()
+{
+  MESSAGE("Texte_Iter_1_control");
+//
+  std::string texte ;
+  texte  = Texte_control (_noeud_1, "CreateHypothesis", 1) ;
+  texte += Texte_control ("CreateHypothesis", "Case_Options", 0) ;
+//
+  return texte ;
+//
+}
+//===============================================================================
+// Controle des enchainements de noeuds
+// noeud_1 : noeud de depart
+// noeud_2 : noeud d'arrivee
+// option : 0 : sans caractere de saut de ligne a la fin
+//          1 : avec caractere de saut de ligne a la fin
+//===============================================================================
+  std::string YACSDriver::Texte_control( const std::string noeud_1, const std::string noeud_2, int option )
+{
+  MESSAGE("Texte_control, noeud_1 = "<<noeud_1<<", noeud_2 = "<<noeud_2<<", option = "<<option);
+//
+  std::string texte ;
+  texte  = "                           <control> " ;
+  texte += "<fromnode>" + noeud_1 + "</fromnode>" ;
+  texte += " <tonode>"  + noeud_2 + "</tonode>" ;
+  texte += " </control>" ;
+  if ( option == 1 ) { texte += "\n" ; }
+
+  return texte ;
+//
+}
+//===============================================================================
+// Inport
+// inport_type : type de la donnee a importer
+// inport_nom : nom de la donnee a importer
+//===============================================================================
+  std::string YACSDriver::Texte_inport( const std::string inport_type, const std::string inport_nom )
+{
+//   MESSAGE("Texte_inport, inport_type = "<<inport_type<<", inport_nom = "<<inport_nom);
+//
+  std::string texte ;
+  texte  = "                              <inport " ;
+  texte += "name=\"" + inport_nom + "\" " ;
+  texte += "type=\"" + inport_type + "\"" ;
+  texte += "/>\n" ;
+
+  return texte ;
+//
+}
+//===============================================================================
+// Le repertoire d'execution
+//===============================================================================
+void YACSDriver::Texte_HOMARD_Exec_DirName( )
+{
+  MESSAGE("Texte_HOMARD_Exec_DirName");
+//
+  _Texte += "DirName = \"" + _DirName + "\"\n" ;
+//
+}
+//===============================================================================
+// Le nom du maillage
+//===============================================================================
+void YACSDriver::Texte_HOMARD_Exec_MeshName( const std::string MeshName )
+{
+  MESSAGE("Texte_HOMARD_Exec_MeshName pour "<<MeshName);
+//
+  _Texte += "MeshName = \"" + MeshName + "\"\n" ;
+//
+}
+//===============================================================================
+// Manipulation des instructions python - 1
+// pythonTexte : le texte des instructions python a manipuler
+// indice : numero de la premiere ligne voulue
+// concept : nom du concept a inserer
+//===============================================================================
+void YACSDriver::Texte_python_1( const std::string pythonTexte, int indice, const std::string concept )
+{
+  MESSAGE("Texte_python_1, pythonTexte\n"<<pythonTexte);
+  MESSAGE("indice = "<<indice<<", concept = "<<concept);
+//
+// Conversion de type
+  std::istringstream tout (pythonTexte) ;
+//   MESSAGE("\ntout :"<<tout);
+  std::string ligne; // variable contenant chaque ligne de python
+  std::string ligne_bis ; // variable contenant la portion de ligne de python apres '.'
+  int cptr = 0 ;
+  indice -= 1 ;
+  while ( std::getline( tout, ligne ) )
+  {
+    if ( cptr > indice )
+    {
+      int position = ligne.find_first_of( "." ) ;
+      MESSAGE("\nposition : "<< position);
+      if ( position > 0 )
+      {
+        ligne_bis = ligne.substr( position );
+        MESSAGE("\nligne_bis : "<< ligne_bis);
+        _Texte += concept + ligne_bis + "\n" ;
+      }
+    }
+    cptr += 1 ;
+  }
+//
+}
+//===============================================================================
+// Manipulation des instructions python - 2
+// pythonTexte : le texte des instructions python a manipuler
+// mot_cle : mot-cle dans les lignes a inserer
+// concept : nom du concept a inserer
+//===============================================================================
+void YACSDriver::Texte_python_2( const std::string pythonTexte, const std::string mot_cle, const std::string concept )
+{
+  MESSAGE("Texte_python_2, pythonTexte\n"<<pythonTexte);
+  MESSAGE("mot_cle = "<<mot_cle<<", concept = "<<concept);
+//
+// Conversion de type
+  std::istringstream tout (pythonTexte) ;
+//   MESSAGE("\ntout :"<<tout);
+  std::string ligne; // variable contenant chaque ligne de python
+  std::string ligne_bis ; // variable contenant la portion de ligne de python apres '.'
+  while ( std::getline( tout, ligne ) )
+  {
+    int reperage = ligne.find( mot_cle ) ;
+    if ( reperage > 0 )
+    {
+      int position = ligne.find_first_of( "." ) ;
+//       MESSAGE("\nposition : "<< position);
+      if ( position > 0 )
+      {
+        ligne_bis = ligne.substr( position );
+//         MESSAGE("\nligne_bis : "<< ligne_bis);
+        _Texte += concept + ligne_bis + "\n" ;
+      }
+    }
+  }
+//
+}
+//===============================================================================
+// Parametres de tests de convergence
+//===============================================================================
+void YACSDriver::TexteAnalyse_Test_Convergence( int MaxIter, int MaxNode, int MaxElem )
+{
+//
+//   MESSAGE("TexteAnalyse_Test_Convergence");
+  std::string chaine ;
+  std::ostringstream oss1;
+  oss1 << MaxIter;
+  chaine = oss1.str();
+  _Texte += "MaxIter = " + chaine + "\n" ;
+  std::ostringstream oss2;
+  oss2 << MaxNode;
+  chaine = oss2.str();
+  _Texte += "MaxNode = " + chaine + "\n" ;
+  std::ostringstream oss3;
+  oss3 << MaxElem;
+  chaine = oss3.str();
+  _Texte += "MaxElem = " + chaine + "\n" ;
+//
+}
+//===============================================================================
+// Creation d'un parametre
+//===============================================================================
+void YACSDriver::TexteParametre( const std::string node, const std::string port, const std::string type_value, const std::string value )
+{
+//
+//   MESSAGE("TexteParametre");
+  _Texte_parametres += "   <parameter>\n" ;
+  _Texte_parametres += "      <tonode>" + node + "</tonode>" ;
+  _Texte_parametres += "<toport>" + port + "</toport>\n" ;
+  _Texte_parametres += "      <value><" + type_value + ">" + value + "</" + type_value + "></value>\n" ;
+  _Texte_parametres += "   </parameter>\n" ;
+//
+}
+//===============================================================================
+// Ajout des parametres
+//===============================================================================
+void YACSDriver::TexteAddParametres( )
+{
+//
+  MESSAGE("TexteAddParametres");
+  TexteAdd(_Texte_parametres) ;
+//
+}
+//===============================================================================
+void YACSDriver::CreeFichier( )
+{
+//
+  MESSAGE("CreeFichier sur le fichier "<<_XMLFile);
+  std::ofstream Fic(_XMLFile.c_str(), std::ios::out ) ;
+  if (Fic.is_open() == true) { Fic << _Texte << std::endl ; }
+  Fic.close() ;
+//
+}
+//===============================================================================
+// REMARQUE : on devrait utiliser le GetStringInTexte de HOMARD_Gen_i mais je ne sais pas
+//            comment l'appeler. ALors je clone.
+// Recuperation de la chaine de caracteres par rapport l'apparition d'un texte
+// ligne : la ligne a manipuler
+// texte : le texte a reperer
+// option : 0 : la chaine avant le texte
+//          1 : la chaine apres le texte
+// Si le texte est absent, on retourne la chaine totale
+//===============================================================================
+std::string YACSDriver::GetStringInTexte( const std::string ligne, const std::string texte, int option )
+{
+//   MESSAGE("GetStringInTexte, recherche de '"<<texte<<"' dans '"<<ligne<<"'"<<", option = "<<option);
+//
+  std::string chaine = ligne ;
+  int position = ligne.find_first_of( texte ) ;
+  if ( position > 0 )
+  {
+    if ( option == 0 ) { chaine = ligne.substr( 0, position ) ; }
+    else               { chaine = ligne.substr( position+1 ) ; }
+  }
+// Conversion de type
+  return chaine ;
+//
+}
diff --git a/src/HOMARD/YACSDriver.hxx b/src/HOMARD/YACSDriver.hxx
new file mode 100644 (file)
index 0000000..320d2a2
--- /dev/null
@@ -0,0 +1,67 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+# ifndef __YACSDRIVER_H__
+# define __YACSDRIVER_H__
+
+#include "HOMARD.hxx"
+
+#include <iostream>
+#include <fstream>
+
+class HOMARDIMPL_EXPORT YACSDriver
+{
+public:
+  YACSDriver(const std::string XMLFile, const std::string DirName) ;
+  ~YACSDriver() ;
+  //
+  void        TexteAdd( const std::string ligne ) ;
+  void        Texte_DataInit_MeshFile( const std::string Meshfile ) ;
+  void        Texte_Alternance_Calcul_HOMARD_Calcul( const std::string FileName ) ;
+  void        Texte_Iter_1_Case_Options( const std::string pythonCas ) ;
+  std::string Texte_Iter_1_Boundary( int BoundaryType, const std::string pythonStructure, const std::string methode, const std::string BoundaryName, const std::string MeshName, const std::string MeshFile ) ;
+  std::string Texte_Iter_1_Zone( int ZoneType, const std::string pythonStructure, const std::string methode, const std::string ZoneName ) ;
+  std::string Texte_Iter_1_control() ;
+  std::string Texte_control( const std::string noeud_1, const std::string noeud_2, int option ) ;
+  std::string Texte_inport( const std::string inport_type, const std::string inport_nom ) ;
+  void        Texte_HOMARD_Exec_DirName( ) ;
+  void        Texte_HOMARD_Exec_MeshName( const std::string MeshName ) ;
+  void        Texte_python_1( const std::string pythonTexte, int indice, const std::string concept ) ;
+  void        Texte_python_2( const std::string pythonTexte, const std::string mot_cle, const std::string concept ) ;
+  void        TexteParametre( const std::string node, const std::string port, const std::string type_value, const std::string value ) ;
+  void        TexteAnalyse_Test_Convergence( int MaxIter, int MaxNode, int MaxElem ) ;
+  void        TexteAddParametres( ) ;
+  void        CreeFichier() ;
+  //
+
+public:
+  std::string _XMLFile ;
+  std::string _DirName ;
+  std::string _Texte ;
+  std::string _Texte_parametres ;
+  std::string _noeud_1 ;
+  bool _bLu;
+
+private :
+  std::string GetStringInTexte( const std::string Texte, const std::string String, int option ) ;
+};
+
+# endif         /* # ifndef __YACSDRIVER_H__ */
diff --git a/src/HOMARDGUI/CMakeLists.txt b/src/HOMARDGUI/CMakeLists.txt
new file mode 100644 (file)
index 0000000..48382c7
--- /dev/null
@@ -0,0 +1,170 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+INCLUDE(UseQtExt)
+INCLUDE(UsePyQt)
+
+# --- options ---
+
+# additional include directories
+INCLUDE_DIRECTORIES(
+  ${QT_INCLUDES}
+  ${CAS_INCLUDE_DIRS}
+  ${PYTHON_INCLUDE_DIRS}
+  ${MEDFILE_INCLUDE_DIRS}
+  ${HDF5_INCLUDE_DIRS}
+  ${Boost_INCLUDE_DIRS}
+  ${OMNIORB_INCLUDE_DIR}
+  ${KERNEL_INCLUDE_DIRS}
+  ${GUI_INCLUDE_DIRS}
+  ${CMAKE_CURRENT_SOURCE_DIR}
+  ${CMAKE_CURRENT_BINARY_DIR}
+  ${PROJECT_BINARY_DIR}
+  ${PROJECT_BINARY_DIR}/idl
+  ${PROJECT_BINARY_DIR}/adm_local/unix
+  ${PROJECT_SOURCE_DIR}/src/HOMARD
+  ${PROJECT_SOURCE_DIR}/src/HOMARD_I
+)
+
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(
+  ${BOOST_DEFINITIONS}
+  ${OMNIORB_DEFINITIONS}
+  ${CAS_DEFINITIONS}
+  ${KERNEL_DEFINITIONS}
+)
+
+# libraries to link to
+SET(_link_LIBRARIES
+  ${MEDFILE_C_LIBRARIES}
+  ${KERNEL_SalomeLifeCycleCORBA}
+  ${KERNEL_SalomeDS}
+  ${GUI_SalomeApp}
+  SalomeIDLHOMARD
+  HOMARDEngine
+)
+
+# --- resources ---
+
+# resource files / to be processed by lrelease
+SET(_ts_RESOURCES
+  HOMARD_msg_en.ts
+  HOMARD_msg_fr.ts
+  HOMARD_msg_ja.ts
+) 
+
+# resource files / to be processed by uic
+SET(_uic_FILES
+  CreateBoundaryAn.ui
+  CreateBoundaryDi.ui
+  CreateCase.ui
+  CreateHypothesis.ui
+  CreateIteration.ui
+  CreateListGroup.ui
+  CreateYACS.ui
+  CreateZone.ui
+  EditFile.ui
+  IterInfo.ui
+  MeshInfo.ui
+  PursueIteration.ui
+)
+
+# --- headers ---
+
+# header files / to be processed by moc
+SET(_moc_HEADERS
+  HOMARDGUI.h
+  MonCreateBoundaryAn.h
+  MonEditBoundaryAn.h
+  MonCreateBoundaryDi.h
+  MonEditBoundaryDi.h
+  MonCreateCase.h
+  MonEditCase.h
+  MonCreateZone.h
+  MonEditZone.h
+  MonCreateHypothesis.h
+  MonEditHypothesis.h
+  MonCreateListGroup.h
+  MonEditListGroup.h
+  MonCreateIteration.h
+  MonEditIteration.h
+  MonPursueIteration.h
+  MonMeshInfo.h
+  MonIterInfo.h
+  MonCreateYACS.h
+  MonEditYACS.h
+  MonEditFile.h
+)
+
+# header files / uic wrappings
+QT_WRAP_UIC(_uic_HEADERS ${_uic_FILES})
+  
+# header files / static
+SET(_other_HEADERS
+  HOMARDGUI_Utils.h
+  HomardQtCommun.h
+  HOMARDGUI_Exports.hxx
+)
+
+# header files / to install
+SET(HOMARD_HEADERS ${_other_HEADERS} ${_moc_HEADERS} ${_uic_HEADERS})
+
+# --- sources ---
+
+# sources / moc wrappings
+QT_WRAP_MOC(_moc_SOURCES ${_moc_HEADERS})
+
+# sources / static
+SET(_other_SOURCES
+  HOMARDGUI.cxx
+  HOMARDGUI_Utils.cxx
+  MonCreateBoundaryAn.cxx
+  MonEditBoundaryAn.cxx
+  MonCreateBoundaryDi.cxx
+  MonEditBoundaryDi.cxx
+  MonCreateCase.cxx
+  MonEditCase.cxx
+  MonCreateHypothesis.cxx
+  MonEditHypothesis.cxx
+  MonCreateListGroup.cxx
+  MonEditListGroup.cxx
+  MonCreateIteration.cxx
+  MonEditIteration.cxx
+  MonPursueIteration.cxx
+  MonCreateZone.cxx
+  MonEditZone.cxx
+  MonMeshInfo.cxx
+  MonIterInfo.cxx
+  MonCreateYACS.cxx
+  MonEditYACS.cxx
+  MonEditFile.cxx
+  HomardQtCommun.cxx
+)
+
+# sources / to compile
+SET(HOMARD_SOURCES ${_other_SOURCES} ${_moc_SOURCES} ${_uic_HEADERS})
+
+# --- rules ---
+
+ADD_LIBRARY(HOMARD ${HOMARD_SOURCES})
+TARGET_LINK_LIBRARIES(HOMARD ${_link_LIBRARIES} )
+INSTALL(TARGETS HOMARD EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
+INSTALL(FILES ${HOMARD_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
+QT_INSTALL_TS_RESOURCES("${_ts_RESOURCES}" "${SALOME_HOMARD_INSTALL_RES_DATA}")
diff --git a/src/HOMARDGUI/CreateBoundaryAn.h b/src/HOMARDGUI/CreateBoundaryAn.h
deleted file mode 100644 (file)
index c41dfbd..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/********************************************************************************
-** Form generated from reading ui file 'CreateBoundaryAn.ui'
-**
-** Created: Fri Sep 2 14:55:24 2011
-**      by: Qt User Interface Compiler version 4.2.1
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
-#ifndef CREATEBOUNDARYAN_H
-#define CREATEBOUNDARYAN_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QDialog>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-
-class Ui_CreateBoundaryAn
-{
-public:
-    QGridLayout *gridLayout;
-    QGroupBox *GBButtons;
-    QGridLayout *gridLayout1;
-    QPushButton *buttonHelp;
-    QPushButton *buttonCancel;
-    QPushButton *buttonApply;
-    QPushButton *buttonOk;
-    QLabel *Name;
-    QLineEdit *LEBoundaryName;
-    QGroupBox *TypeBoundary;
-    QHBoxLayout *hboxLayout;
-    QRadioButton *RBCylindre;
-    QRadioButton *RBSphere;
-    QGroupBox *gBSphere;
-    QGridLayout *gridLayout2;
-    QDoubleSpinBox *SpinBox_Rayon;
-    QDoubleSpinBox *SpinBox_Zcentre;
-    QLabel *TLRayon;
-    QLabel *TLZcentre;
-    QLabel *TLYcentre;
-    QDoubleSpinBox *SpinBox_Ycentre;
-    QDoubleSpinBox *SpinBox_Xcentre;
-    QLabel *TLXcentre;
-    QGroupBox *gBCylindre;
-    QGridLayout *gridLayout3;
-    QDoubleSpinBox *SpinBox_Xcent;
-    QLabel *TLXcent;
-    QDoubleSpinBox *SpinBox_Radius;
-    QDoubleSpinBox *SpinBox_Zcent;
-    QLabel *TLradius;
-    QLabel *TLZcent;
-    QLabel *TLYcent;
-    QDoubleSpinBox *SpinBox_Ycent;
-    QLabel *TLXaxis;
-    QLabel *TLYaxis;
-    QLabel *TLZaxis;
-    QDoubleSpinBox *SpinBox_Zaxis;
-    QDoubleSpinBox *SpinBox_Yaxis;
-    QDoubleSpinBox *SpinBox_Xaxis;
-
-    void setupUi(QDialog *CreateBoundaryAn)
-    {
-    CreateBoundaryAn->setObjectName(QString::fromUtf8("CreateBoundaryAn"));
-    CreateBoundaryAn->setAutoFillBackground(true);
-    CreateBoundaryAn->setSizeGripEnabled(true);
-    gridLayout = new QGridLayout(CreateBoundaryAn);
-    gridLayout->setSpacing(6);
-    gridLayout->setMargin(9);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    GBButtons = new QGroupBox(CreateBoundaryAn);
-    GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
-    QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy.setHorizontalStretch(0);
-    sizePolicy.setVerticalStretch(0);
-    sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth());
-    GBButtons->setSizePolicy(sizePolicy);
-    gridLayout1 = new QGridLayout(GBButtons);
-    gridLayout1->setSpacing(6);
-    gridLayout1->setMargin(9);
-    gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-    buttonHelp = new QPushButton(GBButtons);
-    buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-    gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
-
-    buttonCancel = new QPushButton(GBButtons);
-    buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-    gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
-
-    buttonApply = new QPushButton(GBButtons);
-    buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-    gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
-
-    buttonOk = new QPushButton(GBButtons);
-    buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-
-    gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GBButtons, 4, 0, 1, 2);
-
-    Name = new QLabel(CreateBoundaryAn);
-    Name->setObjectName(QString::fromUtf8("Name"));
-
-    gridLayout->addWidget(Name, 0, 0, 1, 1);
-
-    LEBoundaryName = new QLineEdit(CreateBoundaryAn);
-    LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName"));
-    LEBoundaryName->setMaxLength(32);
-
-    gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 1);
-
-    TypeBoundary = new QGroupBox(CreateBoundaryAn);
-    TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary"));
-    QSizePolicy sizePolicy1(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy1.setHorizontalStretch(0);
-    sizePolicy1.setVerticalStretch(0);
-    sizePolicy1.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth());
-    TypeBoundary->setSizePolicy(sizePolicy1);
-    TypeBoundary->setMinimumSize(QSize(340, 0));
-    hboxLayout = new QHBoxLayout(TypeBoundary);
-    hboxLayout->setSpacing(6);
-    hboxLayout->setMargin(9);
-    hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
-    RBCylindre = new QRadioButton(TypeBoundary);
-    RBCylindre->setObjectName(QString::fromUtf8("RBCylindre"));
-    RBCylindre->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png")));
-    RBCylindre->setCheckable(true);
-    RBCylindre->setChecked(true);
-
-    hboxLayout->addWidget(RBCylindre);
-
-    RBSphere = new QRadioButton(TypeBoundary);
-    RBSphere->setObjectName(QString::fromUtf8("RBSphere"));
-    RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png")));
-
-    hboxLayout->addWidget(RBSphere);
-
-
-    gridLayout->addWidget(TypeBoundary, 1, 0, 1, 2);
-
-    gBSphere = new QGroupBox(CreateBoundaryAn);
-    gBSphere->setObjectName(QString::fromUtf8("gBSphere"));
-    QSizePolicy sizePolicy2(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy2.setHorizontalStretch(0);
-    sizePolicy2.setVerticalStretch(0);
-    sizePolicy2.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth());
-    gBSphere->setSizePolicy(sizePolicy2);
-    gridLayout2 = new QGridLayout(gBSphere);
-    gridLayout2->setSpacing(6);
-    gridLayout2->setMargin(9);
-    gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-    SpinBox_Rayon = new QDoubleSpinBox(gBSphere);
-    SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon"));
-    SpinBox_Rayon->setDecimals(5);
-    SpinBox_Rayon->setMaximum(1e+09);
-    SpinBox_Rayon->setMinimum(0);
-    SpinBox_Rayon->setValue(0);
-
-    gridLayout2->addWidget(SpinBox_Rayon, 1, 3, 1, 1);
-
-    SpinBox_Zcentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre"));
-    SpinBox_Zcentre->setDecimals(5);
-    SpinBox_Zcentre->setMaximum(1e+09);
-    SpinBox_Zcentre->setMinimum(-1e+09);
-    SpinBox_Zcentre->setValue(0);
-
-    gridLayout2->addWidget(SpinBox_Zcentre, 2, 1, 1, 1);
-
-    TLRayon = new QLabel(gBSphere);
-    TLRayon->setObjectName(QString::fromUtf8("TLRayon"));
-    QSizePolicy sizePolicy3(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy3.setHorizontalStretch(0);
-    sizePolicy3.setVerticalStretch(0);
-    sizePolicy3.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth());
-    TLRayon->setSizePolicy(sizePolicy3);
-    TLRayon->setWordWrap(false);
-
-    gridLayout2->addWidget(TLRayon, 1, 2, 1, 1);
-
-    TLZcentre = new QLabel(gBSphere);
-    TLZcentre->setObjectName(QString::fromUtf8("TLZcentre"));
-    QSizePolicy sizePolicy4(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy4.setHorizontalStretch(0);
-    sizePolicy4.setVerticalStretch(0);
-    sizePolicy4.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth());
-    TLZcentre->setSizePolicy(sizePolicy4);
-    TLZcentre->setWordWrap(false);
-
-    gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1);
-
-    TLYcentre = new QLabel(gBSphere);
-    TLYcentre->setObjectName(QString::fromUtf8("TLYcentre"));
-    QSizePolicy sizePolicy5(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy5.setHorizontalStretch(0);
-    sizePolicy5.setVerticalStretch(0);
-    sizePolicy5.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth());
-    TLYcentre->setSizePolicy(sizePolicy5);
-    TLYcentre->setWordWrap(false);
-
-    gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1);
-
-    SpinBox_Ycentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre"));
-    SpinBox_Ycentre->setDecimals(5);
-    SpinBox_Ycentre->setMaximum(1e+09);
-    SpinBox_Ycentre->setMinimum(-1e+09);
-    SpinBox_Ycentre->setValue(0);
-
-    gridLayout2->addWidget(SpinBox_Ycentre, 1, 1, 1, 1);
-
-    SpinBox_Xcentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre"));
-    SpinBox_Xcentre->setDecimals(5);
-    SpinBox_Xcentre->setMaximum(1e+09);
-    SpinBox_Xcentre->setMinimum(-1e+09);
-    SpinBox_Xcentre->setValue(0);
-
-    gridLayout2->addWidget(SpinBox_Xcentre, 0, 1, 1, 1);
-
-    TLXcentre = new QLabel(gBSphere);
-    TLXcentre->setObjectName(QString::fromUtf8("TLXcentre"));
-    QSizePolicy sizePolicy6(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy6.setHorizontalStretch(0);
-    sizePolicy6.setVerticalStretch(0);
-    sizePolicy6.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth());
-    TLXcentre->setSizePolicy(sizePolicy6);
-    TLXcentre->setWordWrap(false);
-
-    gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(gBSphere, 3, 0, 1, 2);
-
-    gBCylindre = new QGroupBox(CreateBoundaryAn);
-    gBCylindre->setObjectName(QString::fromUtf8("gBCylindre"));
-    QSizePolicy sizePolicy7(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy7.setHorizontalStretch(0);
-    sizePolicy7.setVerticalStretch(0);
-    sizePolicy7.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth());
-    gBCylindre->setSizePolicy(sizePolicy7);
-    gridLayout3 = new QGridLayout(gBCylindre);
-    gridLayout3->setSpacing(6);
-    gridLayout3->setMargin(9);
-    gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
-    SpinBox_Xcent = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Xcent->setObjectName(QString::fromUtf8("SpinBox_Xcent"));
-    SpinBox_Xcent->setDecimals(5);
-    SpinBox_Xcent->setMaximum(1e+09);
-    SpinBox_Xcent->setMinimum(-1e+09);
-    SpinBox_Xcent->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Xcent, 0, 1, 1, 1);
-
-    TLXcent = new QLabel(gBCylindre);
-    TLXcent->setObjectName(QString::fromUtf8("TLXcent"));
-    QSizePolicy sizePolicy8(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy8.setHorizontalStretch(0);
-    sizePolicy8.setVerticalStretch(0);
-    sizePolicy8.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth());
-    TLXcent->setSizePolicy(sizePolicy8);
-    TLXcent->setWordWrap(false);
-
-    gridLayout3->addWidget(TLXcent, 0, 0, 1, 1);
-
-    SpinBox_Radius = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius"));
-    SpinBox_Radius->setDecimals(5);
-    SpinBox_Radius->setMaximum(1e+09);
-
-    gridLayout3->addWidget(SpinBox_Radius, 3, 1, 1, 2);
-
-    SpinBox_Zcent = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Zcent->setObjectName(QString::fromUtf8("SpinBox_Zcent"));
-    SpinBox_Zcent->setDecimals(5);
-    SpinBox_Zcent->setMaximum(1e+09);
-    SpinBox_Zcent->setMinimum(-1e+09);
-    SpinBox_Zcent->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Zcent, 2, 1, 1, 1);
-
-    TLradius = new QLabel(gBCylindre);
-    TLradius->setObjectName(QString::fromUtf8("TLradius"));
-    QSizePolicy sizePolicy9(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy9.setHorizontalStretch(0);
-    sizePolicy9.setVerticalStretch(0);
-    sizePolicy9.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth());
-    TLradius->setSizePolicy(sizePolicy9);
-    TLradius->setWordWrap(false);
-
-    gridLayout3->addWidget(TLradius, 3, 0, 1, 1);
-
-    TLZcent = new QLabel(gBCylindre);
-    TLZcent->setObjectName(QString::fromUtf8("TLZcent"));
-    QSizePolicy sizePolicy10(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy10.setHorizontalStretch(0);
-    sizePolicy10.setVerticalStretch(0);
-    sizePolicy10.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth());
-    TLZcent->setSizePolicy(sizePolicy10);
-    TLZcent->setWordWrap(false);
-
-    gridLayout3->addWidget(TLZcent, 2, 0, 1, 1);
-
-    TLYcent = new QLabel(gBCylindre);
-    TLYcent->setObjectName(QString::fromUtf8("TLYcent"));
-    QSizePolicy sizePolicy11(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy11.setHorizontalStretch(0);
-    sizePolicy11.setVerticalStretch(0);
-    sizePolicy11.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth());
-    TLYcent->setSizePolicy(sizePolicy11);
-    TLYcent->setWordWrap(false);
-
-    gridLayout3->addWidget(TLYcent, 1, 0, 1, 1);
-
-    SpinBox_Ycent = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Ycent->setObjectName(QString::fromUtf8("SpinBox_Ycent"));
-    SpinBox_Ycent->setDecimals(5);
-    SpinBox_Ycent->setMaximum(1e+09);
-    SpinBox_Ycent->setMinimum(-1e+09);
-    SpinBox_Ycent->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Ycent, 1, 1, 1, 1);
-
-    TLXaxis = new QLabel(gBCylindre);
-    TLXaxis->setObjectName(QString::fromUtf8("TLXaxis"));
-    QSizePolicy sizePolicy12(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy12.setHorizontalStretch(0);
-    sizePolicy12.setVerticalStretch(0);
-    sizePolicy12.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth());
-    TLXaxis->setSizePolicy(sizePolicy12);
-    TLXaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLXaxis, 0, 2, 1, 1);
-
-    TLYaxis = new QLabel(gBCylindre);
-    TLYaxis->setObjectName(QString::fromUtf8("TLYaxis"));
-    QSizePolicy sizePolicy13(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy13.setHorizontalStretch(0);
-    sizePolicy13.setVerticalStretch(0);
-    sizePolicy13.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth());
-    TLYaxis->setSizePolicy(sizePolicy13);
-    TLYaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLYaxis, 1, 2, 1, 1);
-
-    TLZaxis = new QLabel(gBCylindre);
-    TLZaxis->setObjectName(QString::fromUtf8("TLZaxis"));
-    QSizePolicy sizePolicy14(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy14.setHorizontalStretch(0);
-    sizePolicy14.setVerticalStretch(0);
-    sizePolicy14.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth());
-    TLZaxis->setSizePolicy(sizePolicy14);
-    TLZaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLZaxis, 2, 2, 1, 1);
-
-    SpinBox_Zaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Zaxis->setObjectName(QString::fromUtf8("SpinBox_Zaxis"));
-    SpinBox_Zaxis->setDecimals(5);
-    SpinBox_Zaxis->setMaximum(1e+09);
-    SpinBox_Zaxis->setMinimum(-1e+09);
-    SpinBox_Zaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Zaxis, 2, 3, 1, 1);
-
-    SpinBox_Yaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Yaxis->setObjectName(QString::fromUtf8("SpinBox_Yaxis"));
-    SpinBox_Yaxis->setDecimals(5);
-    SpinBox_Yaxis->setMaximum(1e+09);
-    SpinBox_Yaxis->setMinimum(-1e+09);
-    SpinBox_Yaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Yaxis, 1, 3, 1, 1);
-
-    SpinBox_Xaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Xaxis->setObjectName(QString::fromUtf8("SpinBox_Xaxis"));
-    SpinBox_Xaxis->setDecimals(5);
-    SpinBox_Xaxis->setMaximum(1e+09);
-    SpinBox_Xaxis->setMinimum(-1e+09);
-    SpinBox_Xaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Xaxis, 0, 3, 1, 1);
-
-
-    gridLayout->addWidget(gBCylindre, 2, 0, 1, 2);
-
-
-    retranslateUi(CreateBoundaryAn);
-
-    QSize size(458, 500);
-    size = size.expandedTo(CreateBoundaryAn->minimumSizeHint());
-    CreateBoundaryAn->resize(size);
-
-
-    QMetaObject::connectSlotsByName(CreateBoundaryAn);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateBoundaryAn)
-    {
-    CreateBoundaryAn->setWindowTitle(QApplication::translate("CreateBoundaryAn", "Create an analytical boundary", 0, QApplication::UnicodeUTF8));
-    GBButtons->setTitle(QString());
-    buttonHelp->setText(QApplication::translate("CreateBoundaryAn", "Help", 0, QApplication::UnicodeUTF8));
-    buttonCancel->setText(QApplication::translate("CreateBoundaryAn", "Cancel", 0, QApplication::UnicodeUTF8));
-    buttonApply->setText(QApplication::translate("CreateBoundaryAn", "Apply", 0, QApplication::UnicodeUTF8));
-    buttonOk->setText(QApplication::translate("CreateBoundaryAn", "OK", 0, QApplication::UnicodeUTF8));
-    Name->setText(QApplication::translate("CreateBoundaryAn", "Name", 0, QApplication::UnicodeUTF8));
-    TypeBoundary->setTitle(QApplication::translate("CreateBoundaryAn", "Type of boundary", 0, QApplication::UnicodeUTF8));
-    RBCylindre->setText(QApplication::translate("CreateBoundaryAn", "Cylinder", 0, QApplication::UnicodeUTF8));
-    RBSphere->setText(QApplication::translate("CreateBoundaryAn", "Sphere", 0, QApplication::UnicodeUTF8));
-    gBSphere->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLRayon->setText(QApplication::translate("CreateBoundaryAn", "Radius", 0, QApplication::UnicodeUTF8));
-    TLZcentre->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8));
-    TLYcentre->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8));
-    TLXcentre->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8));
-    gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0, QApplication::UnicodeUTF8));
-    TLradius->setText(QApplication::translate("CreateBoundaryAn", "Radius", 0, QApplication::UnicodeUTF8));
-    TLZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0, QApplication::UnicodeUTF8));
-    TLYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0, QApplication::UnicodeUTF8));
-    TLXaxis->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0, QApplication::UnicodeUTF8));
-    TLYaxis->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0, QApplication::UnicodeUTF8));
-    TLZaxis->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0, QApplication::UnicodeUTF8));
-    Q_UNUSED(CreateBoundaryAn);
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateBoundaryAn: public Ui_CreateBoundaryAn {};
-} // namespace Ui
-
-#endif // CREATEBOUNDARYAN_H
index 0750df022227e711f2f4df4b07e07b707a7e6a99..ac291082db3ba6933ed8512aea53074b57e5359f 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>CreateBoundaryAn</class>
- <widget class="QDialog" name="CreateBoundaryAn" >
-  <property name="geometry" >
+ <widget class="QDialog" name="CreateBoundaryAn">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>458</width>
-    <height>500</height>
+    <width>522</width>
+    <height>835</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Create an analytical boundary</string>
   </property>
-  <property name="autoFillBackground" >
+  <property name="autoFillBackground">
    <bool>true</bool>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
-   </property>
-   <item row="4" column="0" colspan="2" >
-    <widget class="QGroupBox" name="GBButtons" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
-         <string>Help</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonCancel" >
-        <property name="text" >
-         <string>Cancel</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonApply" >
-        <property name="text" >
-         <string>Apply</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonOk" >
-        <property name="text" >
-         <string>OK</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="0" column="0" >
-    <widget class="QLabel" name="Name" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout_5">
+   <item row="0" column="0">
+    <widget class="QLabel" name="Name">
+     <property name="text">
       <string>Name</string>
      </property>
     </widget>
    </item>
-   <item row="0" column="1" >
-    <widget class="QLineEdit" name="LEBoundaryName" >
-     <property name="maxLength" >
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="LEName">
+     <property name="maxLength">
       <number>32</number>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="QGroupBox" name="TypeBoundary" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="1" column="0" colspan="2">
+    <widget class="QGroupBox" name="TypeBoundary">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="minimumSize" >
+     <property name="minimumSize">
       <size>
        <width>340</width>
        <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Type of boundary</string>
      </property>
-     <layout class="QHBoxLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item>
-       <widget class="QRadioButton" name="RBCylindre" >
-        <property name="text" >
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="RBCylindre">
+        <property name="text">
          <string>Cylinder</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/cylinderpointvector.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/cylinderpointvector.png</normaloff>../../resources/cylinderpointvector.png</iconset>
         </property>
-        <property name="checkable" >
+        <property name="checkable">
          <bool>true</bool>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item>
-       <widget class="QRadioButton" name="RBSphere" >
-        <property name="text" >
+      <item row="0" column="1">
+       <widget class="QRadioButton" name="RBSphere">
+        <property name="text">
          <string>Sphere</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/zone_spherepoint.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/zone_spherepoint.png</normaloff>../../resources/zone_spherepoint.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QRadioButton" name="RBCone">
+        <property name="text">
+         <string>Cone</string>
+        </property>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/cone.png</normaloff>../../resources/cone.png</iconset>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QRadioButton" name="RBTore">
+        <property name="text">
+         <string>Torus</string>
+        </property>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/toruspointvector.png</normaloff>../../resources/toruspointvector.png</iconset>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item row="3" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBSphere" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="2" column="0" colspan="2">
+    <widget class="QGroupBox" name="gBCylindre">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Rayon" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xcent">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>X centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zcentre" >
-        <property name="decimals" >
+      <item row="3" column="1" colspan="2">
+       <widget class="QDoubleSpinBox" name="SpinBox_Radius">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zcent">
+        <property name="decimals">
+         <number>5</number>
         </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLRayon" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="3" column="0">
+       <widget class="QLabel" name="TLradius">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Radius</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Z centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Y centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ycentre" >
-        <property name="decimals" >
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ycent">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xcentre" >
-        <property name="decimals" >
-         <number>5</number>
+      <item row="0" column="2">
+       <widget class="QLabel" name="TLXaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
+        <property name="text">
+         <string>X axis</string>
         </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
+        <property name="wordWrap">
+         <bool>false</bool>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLYaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Y axis</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLZaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X centre</string>
+        <property name="text">
+         <string>Z axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBCylindre" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="3" column="0" colspan="2">
+    <widget class="QGroupBox" name="gBSphere">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xcent" >
-        <property name="decimals" >
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Rayon">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>0.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zcentre">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXcent" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLRayon">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X centre</string>
+        <property name="text">
+         <string>Radius</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="1" colspan="2" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Radius" >
-        <property name="decimals" >
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Z centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Y centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ycentre">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>1000000000.000000000000000</double>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zcent" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xcentre">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>X centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="2">
+    <widget class="QGroupBox" name="gBCone">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Coordinates</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <item row="0" column="0" colspan="2">
+       <widget class="QGroupBox" name="groupBox">
+        <property name="title">
+         <string>Definition</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_2">
+         <item row="0" column="0">
+          <widget class="QRadioButton" name="RB_Def_radius">
+           <property name="text">
+            <string>Radius</string>
+           </property>
+           <property name="icon">
+            <iconset>
+             <normaloff>../../resources/conedxyz.png</normaloff>../../resources/conedxyz.png</iconset>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QRadioButton" name="RB_Def_angle">
+           <property name="text">
+            <string>Angle</string>
+           </property>
+           <property name="icon">
+            <iconset>
+             <normaloff>../../resources/conepointvector.png</normaloff>../../resources/conepointvector.png</iconset>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLCone_X1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>X 1</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_X1">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" >
-       <widget class="QLabel" name="TLradius" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLCone_X2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Radius</string>
+        <property name="text">
+         <string>X 2</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZcent" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_X2">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLCone_Y1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z centre</string>
+        <property name="text">
+         <string>Y 1</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
         </property>
-        <property name="wordWrap" >
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_Y1">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLCone_Y2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Y 2</string>
+        </property>
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYcent" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_Y2">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="TLCone_Z1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Y centre</string>
+        <property name="text">
+         <string>Z 1</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ycent" >
-        <property name="decimals" >
+      <item row="3" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_Z1">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QLabel" name="TLCone_Z2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Z 2</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_Z2">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QLabel" name="TLXaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="4" column="0">
+       <widget class="QLabel" name="TLCone_V1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X axis</string>
+        <property name="text">
+         <string>V 1</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLYaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="4" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_V1">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="2">
+       <widget class="QLabel" name="TLCone_V2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Y axis</string>
+        <property name="text">
+         <string>V 2</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="2" >
-       <widget class="QLabel" name="TLZaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="4" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Cone_V2">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="5" column="0" colspan="2">
+    <widget class="QGroupBox" name="gBTore">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Coordinates</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_4">
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLToreXcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z axis</string>
+        <property name="text">
+         <string>X centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreXcent">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLabel" name="TLToreXaxe">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>X axis</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreXaxe">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis" >
-        <property name="decimals" >
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLToreYcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Y centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreYcent">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLToreYaxe">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Y axis</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreYaxe">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis" >
-        <property name="decimals" >
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLToreZcent">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Z centre</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreZcent">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLToreZaxe">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Z axis</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreZaxe">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="TLToreRayRev">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>R revolution</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreRRev">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QLabel" name="TLToreRayPri">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Primary R</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBoxToreRPri">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="6" column="0" colspan="2">
+    <widget class="QGroupBox" name="GBButtons">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>9</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="0" column="3">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
+         <string>Help</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
+         <string>Cancel</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
+         <string>Apply</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
+         <string>OK</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/HOMARDGUI/CreateBoundaryDi.h b/src/HOMARDGUI/CreateBoundaryDi.h
deleted file mode 100644 (file)
index 7caf93d..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/********************************************************************************
-** Form generated from reading ui file 'CreateBoundaryDi.ui'
-**
-** Created: Thu Sep 1 16:37:21 2011
-**      by: Qt User Interface Compiler version 4.2.1
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
-#ifndef CREATEBOUNDARYDI_H
-#define CREATEBOUNDARYDI_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QCheckBox>
-#include <QtGui/QDialog>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-
-class Ui_CreateBoundaryDi
-{
-public:
-    QGridLayout *gridLayout;
-    QGroupBox *GBButtons;
-    QGridLayout *gridLayout1;
-    QPushButton *buttonHelp;
-    QPushButton *buttonCancel;
-    QPushButton *buttonApply;
-    QPushButton *buttonOk;
-    QCheckBox *CBGroupe;
-    QLineEdit *LEFileName;
-    QPushButton *PushFichier;
-    QLabel *Mesh;
-    QLineEdit *LEBoundaryName;
-    QLabel *Name;
-
-    void setupUi(QDialog *CreateBoundaryDi)
-    {
-    CreateBoundaryDi->setObjectName(QString::fromUtf8("CreateBoundaryDi"));
-    QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy.setHorizontalStretch(0);
-    sizePolicy.setVerticalStretch(0);
-    sizePolicy.setHeightForWidth(CreateBoundaryDi->sizePolicy().hasHeightForWidth());
-    CreateBoundaryDi->setSizePolicy(sizePolicy);
-    CreateBoundaryDi->setAutoFillBackground(true);
-    CreateBoundaryDi->setSizeGripEnabled(true);
-    gridLayout = new QGridLayout(CreateBoundaryDi);
-    gridLayout->setSpacing(6);
-    gridLayout->setMargin(9);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    GBButtons = new QGroupBox(CreateBoundaryDi);
-    GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
-    gridLayout1 = new QGridLayout(GBButtons);
-    gridLayout1->setSpacing(6);
-    gridLayout1->setMargin(9);
-    gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-    buttonHelp = new QPushButton(GBButtons);
-    buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-    gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
-
-    buttonCancel = new QPushButton(GBButtons);
-    buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-    gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
-
-    buttonApply = new QPushButton(GBButtons);
-    buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-    gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
-
-    buttonOk = new QPushButton(GBButtons);
-    buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-
-    gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GBButtons, 3, 0, 1, 3);
-
-    CBGroupe = new QCheckBox(CreateBoundaryDi);
-    CBGroupe->setObjectName(QString::fromUtf8("CBGroupe"));
-
-    gridLayout->addWidget(CBGroupe, 2, 0, 1, 3);
-
-    LEFileName = new QLineEdit(CreateBoundaryDi);
-    LEFileName->setObjectName(QString::fromUtf8("LEFileName"));
-    LEFileName->setMinimumSize(QSize(370, 21));
-
-    gridLayout->addWidget(LEFileName, 1, 2, 1, 1);
-
-    PushFichier = new QPushButton(CreateBoundaryDi);
-    PushFichier->setObjectName(QString::fromUtf8("PushFichier"));
-
-    gridLayout->addWidget(PushFichier, 1, 1, 1, 1);
-
-    Mesh = new QLabel(CreateBoundaryDi);
-    Mesh->setObjectName(QString::fromUtf8("Mesh"));
-
-    gridLayout->addWidget(Mesh, 1, 0, 1, 1);
-
-    LEBoundaryName = new QLineEdit(CreateBoundaryDi);
-    LEBoundaryName->setObjectName(QString::fromUtf8("LEBoundaryName"));
-    LEBoundaryName->setMinimumSize(QSize(382, 21));
-    LEBoundaryName->setMaxLength(32);
-
-    gridLayout->addWidget(LEBoundaryName, 0, 1, 1, 2);
-
-    Name = new QLabel(CreateBoundaryDi);
-    Name->setObjectName(QString::fromUtf8("Name"));
-
-    gridLayout->addWidget(Name, 0, 0, 1, 1);
-
-
-    retranslateUi(CreateBoundaryDi);
-
-    QSize size(566, 169);
-    size = size.expandedTo(CreateBoundaryDi->minimumSizeHint());
-    CreateBoundaryDi->resize(size);
-
-
-    QMetaObject::connectSlotsByName(CreateBoundaryDi);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateBoundaryDi)
-    {
-    CreateBoundaryDi->setWindowTitle(QApplication::translate("CreateBoundaryDi", "Create a discrete boundary", 0, QApplication::UnicodeUTF8));
-    GBButtons->setTitle(QString());
-    buttonHelp->setText(QApplication::translate("CreateBoundaryDi", "Help", 0, QApplication::UnicodeUTF8));
-    buttonCancel->setText(QApplication::translate("CreateBoundaryDi", "Cancel", 0, QApplication::UnicodeUTF8));
-    buttonApply->setText(QApplication::translate("CreateBoundaryDi", "Apply", 0, QApplication::UnicodeUTF8));
-    buttonOk->setText(QApplication::translate("CreateBoundaryDi", "OK", 0, QApplication::UnicodeUTF8));
-    CBGroupe->setText(QApplication::translate("CreateBoundaryDi", "Filtering with groups", 0, QApplication::UnicodeUTF8));
-    PushFichier->setText(QString());
-    Mesh->setText(QApplication::translate("CreateBoundaryDi", "Mesh", 0, QApplication::UnicodeUTF8));
-    Name->setText(QApplication::translate("CreateBoundaryDi", "Name", 0, QApplication::UnicodeUTF8));
-    Q_UNUSED(CreateBoundaryDi);
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateBoundaryDi: public Ui_CreateBoundaryDi {};
-} // namespace Ui
-
-#endif // CREATEBOUNDARYDI_H
index 3cc0ec09e3c686b71d219219ca1f4900f50fcc03..b505ff8692c43021eeef73f5e9390a02d60e7f23 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>CreateBoundaryDi</class>
- <widget class="QDialog" name="CreateBoundaryDi" >
-  <property name="geometry" >
+ <widget class="QDialog" name="CreateBoundaryDi">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>169</height>
    </rect>
   </property>
-  <property name="sizePolicy" >
-   <sizepolicy>
-    <hsizetype>0</hsizetype>
-    <vsizetype>0</vsizetype>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Create a discrete boundary</string>
   </property>
-  <property name="autoFillBackground" >
+  <property name="autoFillBackground">
    <bool>true</bool>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" >
-   <property name="margin" >
+  <layout class="QGridLayout">
+   <property name="margin">
     <number>9</number>
    </property>
-   <property name="spacing" >
+   <property name="spacing">
     <number>6</number>
    </property>
-   <item row="3" column="0" colspan="3" >
-    <widget class="QGroupBox" name="GBButtons" >
-     <property name="title" >
+   <item row="3" column="0" colspan="3">
+    <widget class="QGroupBox" name="GBButtons">
+     <property name="title">
       <string/>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
+      <item row="0" column="3">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
          <string>Help</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonCancel" >
-        <property name="text" >
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
          <string>Cancel</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonApply" >
-        <property name="text" >
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
          <string>Apply</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonOk" >
-        <property name="text" >
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
          <string>OK</string>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="3" >
-    <widget class="QCheckBox" name="CBGroupe" >
-     <property name="text" >
+   <item row="2" column="0" colspan="3">
+    <widget class="QCheckBox" name="CBGroupe">
+     <property name="text">
       <string>Filtering with groups</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="2" >
-    <widget class="QLineEdit" name="LEFileName" >
-     <property name="minimumSize" >
+   <item row="1" column="2">
+    <widget class="QLineEdit" name="LEFileName">
+     <property name="minimumSize">
       <size>
        <width>370</width>
        <height>21</height>
      </property>
     </widget>
    </item>
-   <item row="1" column="1" >
-    <widget class="QPushButton" name="PushFichier" >
-     <property name="text" >
+   <item row="1" column="1">
+    <widget class="QPushButton" name="PushFichier">
+     <property name="text">
       <string/>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QLabel" name="Mesh" >
-     <property name="text" >
+   <item row="1" column="0">
+    <widget class="QLabel" name="Mesh">
+     <property name="text">
       <string>Mesh</string>
      </property>
     </widget>
    </item>
-   <item row="0" column="1" colspan="2" >
-    <widget class="QLineEdit" name="LEBoundaryName" >
-     <property name="minimumSize" >
+   <item row="0" column="1" colspan="2">
+    <widget class="QLineEdit" name="LEName">
+     <property name="minimumSize">
       <size>
        <width>382</width>
        <height>21</height>
       </size>
      </property>
-     <property name="maxLength" >
+     <property name="maxLength">
       <number>32</number>
      </property>
     </widget>
    </item>
-   <item row="0" column="0" >
-    <widget class="QLabel" name="Name" >
-     <property name="text" >
+   <item row="0" column="0">
+    <widget class="QLabel" name="Name">
+     <property name="text">
       <string>Name</string>
      </property>
     </widget>
diff --git a/src/HOMARDGUI/CreateCase.h b/src/HOMARDGUI/CreateCase.h
deleted file mode 100644 (file)
index 46af698..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-/********************************************************************************
-** Form generated from reading UI file 'CreateCase.ui'
-**
-** Created: Wed Feb 15 18:15:40 2012
-**      by: Qt User Interface Compiler version 4.6.3
-**
-** WARNING! All changes made in this file will be lost when recompiling UI file!
-********************************************************************************/
-
-#ifndef CREATECASE_H
-#define CREATECASE_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QCheckBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialog>
-#include <QtGui/QFormLayout>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QtGui/QSpacerItem>
-#include <QtGui/QTableWidget>
-
-QT_BEGIN_NAMESPACE
-
-class Ui_CreateCase
-{
-public:
-    QGridLayout *gridLayout_2;
-    QHBoxLayout *hboxLayout;
-    QLabel *Name;
-    QLineEdit *LECaseName;
-    QHBoxLayout *hboxLayout1;
-    QLabel *Directory;
-    QPushButton *PushDir;
-    QLineEdit *LEDirName;
-    QSpacerItem *spacerItem;
-    QHBoxLayout *hboxLayout2;
-    QLabel *Mesh_2;
-    QPushButton *PushFichier;
-    QLineEdit *LEFileName;
-    QSpacerItem *spacerItem1;
-    QGroupBox *GBTypeConf;
-    QHBoxLayout *hboxLayout3;
-    QRadioButton *RBConforme;
-    QRadioButton *RBNonConforme;
-    QSpacerItem *spacerItem2;
-    QGroupBox *GBTypeNoConf;
-    QHBoxLayout *hboxLayout4;
-    QRadioButton *RB1NpM;
-    QRadioButton *RB1NpA;
-    QRadioButton *RBQuelconque;
-    QSpacerItem *spacerItem3;
-    QHBoxLayout *hboxLayout5;
-    QCheckBox *CBBoundaryD;
-    QCheckBox *CBBoundaryA;
-    QSpacerItem *spacerItem4;
-    QGroupBox *GBBoundaryD;
-    QGridLayout *gridLayout;
-    QPushButton *PBBoundaryDiEdit;
-    QPushButton *PBBoundaryDiNew;
-    QComboBox *CBBoundaryDi;
-    QSpacerItem *spacerItem5;
-    QPushButton *PBBoundaryDiHelp;
-    QGroupBox *GBBoundaryA;
-    QFormLayout *formLayout;
-    QTableWidget *TWBoundary;
-    QGridLayout *gridLayout1;
-    QPushButton *PBBoundaryAnEdit;
-    QPushButton *PBBoundaryAnNew;
-    QPushButton *PBBoundaryAnHelp;
-    QSpacerItem *spacer;
-    QCheckBox *CBAdvanced;
-    QGroupBox *GBAdvancedOptions;
-    QGridLayout *gridLayout2;
-    QCheckBox *CBPyramid;
-    QSpacerItem *spacer_3;
-    QSpacerItem *spacer_4;
-    QGroupBox *GroupButtons;
-    QGridLayout *gridLayout3;
-    QPushButton *buttonHelp;
-    QPushButton *buttonApply;
-    QPushButton *buttonOk;
-    QPushButton *buttonCancel;
-    QSpacerItem *spacer_2;
-
-    void setupUi(QDialog *CreateCase)
-    {
-        if (CreateCase->objectName().isEmpty())
-            CreateCase->setObjectName(QString::fromUtf8("CreateCase"));
-        CreateCase->resize(601, 1070);
-        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-        sizePolicy.setHorizontalStretch(0);
-        sizePolicy.setVerticalStretch(0);
-        sizePolicy.setHeightForWidth(CreateCase->sizePolicy().hasHeightForWidth());
-        CreateCase->setSizePolicy(sizePolicy);
-        CreateCase->setAutoFillBackground(true);
-        gridLayout_2 = new QGridLayout(CreateCase);
-        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
-        hboxLayout = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout->setContentsMargins(0, 0, 0, 0);
-#endif
-        hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
-        Name = new QLabel(CreateCase);
-        Name->setObjectName(QString::fromUtf8("Name"));
-
-        hboxLayout->addWidget(Name);
-
-        LECaseName = new QLineEdit(CreateCase);
-        LECaseName->setObjectName(QString::fromUtf8("LECaseName"));
-        LECaseName->setMinimumSize(QSize(382, 21));
-
-        hboxLayout->addWidget(LECaseName);
-
-
-        gridLayout_2->addLayout(hboxLayout, 0, 0, 1, 4);
-
-        hboxLayout1 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout1->setSpacing(6);
-#endif
-        hboxLayout1->setContentsMargins(0, 0, 0, 0);
-        hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
-        Directory = new QLabel(CreateCase);
-        Directory->setObjectName(QString::fromUtf8("Directory"));
-
-        hboxLayout1->addWidget(Directory);
-
-        PushDir = new QPushButton(CreateCase);
-        PushDir->setObjectName(QString::fromUtf8("PushDir"));
-        PushDir->setAutoDefault(false);
-
-        hboxLayout1->addWidget(PushDir);
-
-        LEDirName = new QLineEdit(CreateCase);
-        LEDirName->setObjectName(QString::fromUtf8("LEDirName"));
-        LEDirName->setMinimumSize(QSize(382, 21));
-
-        hboxLayout1->addWidget(LEDirName);
-
-
-        gridLayout_2->addLayout(hboxLayout1, 1, 0, 1, 4);
-
-        spacerItem = new QSpacerItem(20, 18, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacerItem, 2, 1, 1, 1);
-
-        hboxLayout2 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout2->setSpacing(6);
-#endif
-        hboxLayout2->setContentsMargins(0, 0, 0, 0);
-        hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
-        Mesh_2 = new QLabel(CreateCase);
-        Mesh_2->setObjectName(QString::fromUtf8("Mesh_2"));
-
-        hboxLayout2->addWidget(Mesh_2);
-
-        PushFichier = new QPushButton(CreateCase);
-        PushFichier->setObjectName(QString::fromUtf8("PushFichier"));
-        PushFichier->setAutoDefault(false);
-
-        hboxLayout2->addWidget(PushFichier);
-
-        LEFileName = new QLineEdit(CreateCase);
-        LEFileName->setObjectName(QString::fromUtf8("LEFileName"));
-        LEFileName->setMinimumSize(QSize(382, 21));
-
-        hboxLayout2->addWidget(LEFileName);
-
-
-        gridLayout_2->addLayout(hboxLayout2, 3, 0, 1, 4);
-
-        spacerItem1 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacerItem1, 4, 1, 1, 3);
-
-        GBTypeConf = new QGroupBox(CreateCase);
-        GBTypeConf->setObjectName(QString::fromUtf8("GBTypeConf"));
-        hboxLayout3 = new QHBoxLayout(GBTypeConf);
-#ifndef Q_OS_MAC
-        hboxLayout3->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout3->setContentsMargins(9, 9, 9, 9);
-#endif
-        hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
-        RBConforme = new QRadioButton(GBTypeConf);
-        RBConforme->setObjectName(QString::fromUtf8("RBConforme"));
-        RBConforme->setChecked(true);
-
-        hboxLayout3->addWidget(RBConforme);
-
-        RBNonConforme = new QRadioButton(GBTypeConf);
-        RBNonConforme->setObjectName(QString::fromUtf8("RBNonConforme"));
-
-        hboxLayout3->addWidget(RBNonConforme);
-
-
-        gridLayout_2->addWidget(GBTypeConf, 5, 0, 1, 1);
-
-        spacerItem2 = new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacerItem2, 6, 1, 1, 1);
-
-        GBTypeNoConf = new QGroupBox(CreateCase);
-        GBTypeNoConf->setObjectName(QString::fromUtf8("GBTypeNoConf"));
-        hboxLayout4 = new QHBoxLayout(GBTypeNoConf);
-#ifndef Q_OS_MAC
-        hboxLayout4->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout4->setContentsMargins(9, 9, 9, 9);
-#endif
-        hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4"));
-        RB1NpM = new QRadioButton(GBTypeNoConf);
-        RB1NpM->setObjectName(QString::fromUtf8("RB1NpM"));
-
-        hboxLayout4->addWidget(RB1NpM);
-
-        RB1NpA = new QRadioButton(GBTypeNoConf);
-        RB1NpA->setObjectName(QString::fromUtf8("RB1NpA"));
-
-        hboxLayout4->addWidget(RB1NpA);
-
-        RBQuelconque = new QRadioButton(GBTypeNoConf);
-        RBQuelconque->setObjectName(QString::fromUtf8("RBQuelconque"));
-
-        hboxLayout4->addWidget(RBQuelconque);
-
-
-        gridLayout_2->addWidget(GBTypeNoConf, 7, 0, 1, 3);
-
-        spacerItem3 = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacerItem3, 8, 1, 1, 3);
-
-        hboxLayout5 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout5->setSpacing(6);
-#endif
-        hboxLayout5->setContentsMargins(0, 0, 0, 0);
-        hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5"));
-        CBBoundaryD = new QCheckBox(CreateCase);
-        CBBoundaryD->setObjectName(QString::fromUtf8("CBBoundaryD"));
-
-        hboxLayout5->addWidget(CBBoundaryD);
-
-        CBBoundaryA = new QCheckBox(CreateCase);
-        CBBoundaryA->setObjectName(QString::fromUtf8("CBBoundaryA"));
-
-        hboxLayout5->addWidget(CBBoundaryA);
-
-
-        gridLayout_2->addLayout(hboxLayout5, 9, 0, 1, 2);
-
-        spacerItem4 = new QSpacerItem(20, 2, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacerItem4, 10, 1, 1, 1);
-
-        GBBoundaryD = new QGroupBox(CreateCase);
-        GBBoundaryD->setObjectName(QString::fromUtf8("GBBoundaryD"));
-        sizePolicy.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth());
-        GBBoundaryD->setSizePolicy(sizePolicy);
-        gridLayout = new QGridLayout(GBBoundaryD);
-#ifndef Q_OS_MAC
-        gridLayout->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-        PBBoundaryDiEdit = new QPushButton(GBBoundaryD);
-        PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit"));
-        PBBoundaryDiEdit->setAutoDefault(false);
-
-        gridLayout->addWidget(PBBoundaryDiEdit, 0, 3, 1, 1);
-
-        PBBoundaryDiNew = new QPushButton(GBBoundaryD);
-        PBBoundaryDiNew->setObjectName(QString::fromUtf8("PBBoundaryDiNew"));
-        PBBoundaryDiNew->setAutoDefault(false);
-
-        gridLayout->addWidget(PBBoundaryDiNew, 0, 2, 1, 1);
-
-        CBBoundaryDi = new QComboBox(GBBoundaryD);
-        CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi"));
-        CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents);
-
-        gridLayout->addWidget(CBBoundaryDi, 0, 0, 1, 1);
-
-        spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
-
-        gridLayout->addItem(spacerItem5, 0, 1, 1, 1);
-
-        PBBoundaryDiHelp = new QPushButton(GBBoundaryD);
-        PBBoundaryDiHelp->setObjectName(QString::fromUtf8("PBBoundaryDiHelp"));
-        PBBoundaryDiHelp->setAutoDefault(false);
-
-        gridLayout->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1);
-
-
-        gridLayout_2->addWidget(GBBoundaryD, 11, 0, 1, 3);
-
-        GBBoundaryA = new QGroupBox(CreateCase);
-        GBBoundaryA->setObjectName(QString::fromUtf8("GBBoundaryA"));
-        GBBoundaryA->setMinimumSize(QSize(548, 200));
-        formLayout = new QFormLayout(GBBoundaryA);
-        formLayout->setObjectName(QString::fromUtf8("formLayout"));
-        TWBoundary = new QTableWidget(GBBoundaryA);
-        if (TWBoundary->columnCount() < 1)
-            TWBoundary->setColumnCount(1);
-        QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
-        TWBoundary->setHorizontalHeaderItem(0, __qtablewidgetitem);
-        TWBoundary->setObjectName(QString::fromUtf8("TWBoundary"));
-        TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked);
-        TWBoundary->setShowGrid(true);
-        TWBoundary->setRowCount(0);
-        TWBoundary->setColumnCount(1);
-
-        formLayout->setWidget(0, QFormLayout::LabelRole, TWBoundary);
-
-        gridLayout1 = new QGridLayout();
-#ifndef Q_OS_MAC
-        gridLayout1->setSpacing(6);
-#endif
-        gridLayout1->setContentsMargins(0, 0, 0, 0);
-        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-        PBBoundaryAnEdit = new QPushButton(GBBoundaryA);
-        PBBoundaryAnEdit->setObjectName(QString::fromUtf8("PBBoundaryAnEdit"));
-        PBBoundaryAnEdit->setAutoDefault(false);
-
-        gridLayout1->addWidget(PBBoundaryAnEdit, 1, 0, 1, 1);
-
-        PBBoundaryAnNew = new QPushButton(GBBoundaryA);
-        PBBoundaryAnNew->setObjectName(QString::fromUtf8("PBBoundaryAnNew"));
-        PBBoundaryAnNew->setAutoDefault(false);
-
-        gridLayout1->addWidget(PBBoundaryAnNew, 0, 0, 1, 1);
-
-        PBBoundaryAnHelp = new QPushButton(GBBoundaryA);
-        PBBoundaryAnHelp->setObjectName(QString::fromUtf8("PBBoundaryAnHelp"));
-        PBBoundaryAnHelp->setAutoDefault(false);
-
-        gridLayout1->addWidget(PBBoundaryAnHelp, 2, 0, 1, 1);
-
-
-        formLayout->setLayout(0, QFormLayout::FieldRole, gridLayout1);
-
-
-        gridLayout_2->addWidget(GBBoundaryA, 12, 0, 1, 4);
-
-        spacer = new QSpacerItem(239, 41, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacer, 13, 0, 1, 1);
-
-        CBAdvanced = new QCheckBox(CreateCase);
-        CBAdvanced->setObjectName(QString::fromUtf8("CBAdvanced"));
-
-        gridLayout_2->addWidget(CBAdvanced, 14, 0, 1, 1);
-
-        GBAdvancedOptions = new QGroupBox(CreateCase);
-        GBAdvancedOptions->setObjectName(QString::fromUtf8("GBAdvancedOptions"));
-        gridLayout2 = new QGridLayout(GBAdvancedOptions);
-        gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-        CBPyramid = new QCheckBox(GBAdvancedOptions);
-        CBPyramid->setObjectName(QString::fromUtf8("CBPyramid"));
-
-        gridLayout2->addWidget(CBPyramid, 0, 0, 1, 1);
-
-
-        gridLayout_2->addWidget(GBAdvancedOptions, 15, 0, 1, 2);
-
-        spacer_3 = new QSpacerItem(128, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
-
-        gridLayout_2->addItem(spacer_3, 15, 2, 1, 2);
-
-        spacer_4 = new QSpacerItem(239, 41, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout_2->addItem(spacer_4, 16, 0, 1, 2);
-
-        GroupButtons = new QGroupBox(CreateCase);
-        GroupButtons->setObjectName(QString::fromUtf8("GroupButtons"));
-        gridLayout3 = new QGridLayout(GroupButtons);
-#ifndef Q_OS_MAC
-        gridLayout3->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout3->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
-        buttonHelp = new QPushButton(GroupButtons);
-        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-        buttonHelp->setAutoDefault(false);
-
-        gridLayout3->addWidget(buttonHelp, 0, 4, 1, 1);
-
-        buttonApply = new QPushButton(GroupButtons);
-        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-        buttonApply->setAutoDefault(false);
-
-        gridLayout3->addWidget(buttonApply, 0, 1, 1, 1);
-
-        buttonOk = new QPushButton(GroupButtons);
-        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-        buttonOk->setAutoDefault(false);
-
-        gridLayout3->addWidget(buttonOk, 0, 0, 1, 1);
-
-        buttonCancel = new QPushButton(GroupButtons);
-        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-        buttonCancel->setAutoDefault(false);
-
-        gridLayout3->addWidget(buttonCancel, 0, 2, 1, 1);
-
-
-        gridLayout_2->addWidget(GroupButtons, 17, 0, 1, 3);
-
-        spacer_2 = new QSpacerItem(128, 25, QSizePolicy::Fixed, QSizePolicy::Minimum);
-
-        gridLayout_2->addItem(spacer_2, 17, 3, 1, 1);
-
-
-        retranslateUi(CreateCase);
-
-        CBBoundaryDi->setCurrentIndex(-1);
-
-
-        QMetaObject::connectSlotsByName(CreateCase);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateCase)
-    {
-        CreateCase->setWindowTitle(QApplication::translate("CreateCase", "Create a case", 0, QApplication::UnicodeUTF8));
-        Name->setText(QApplication::translate("CreateCase", "Name", 0, QApplication::UnicodeUTF8));
-        Directory->setText(QApplication::translate("CreateCase", "Directory", 0, QApplication::UnicodeUTF8));
-        PushDir->setText(QString());
-        Mesh_2->setText(QApplication::translate("CreateCase", "Mesh", 0, QApplication::UnicodeUTF8));
-        PushFichier->setText(QString());
-        GBTypeConf->setTitle(QApplication::translate("CreateCase", "Conformity type", 0, QApplication::UnicodeUTF8));
-        RBConforme->setText(QApplication::translate("CreateCase", "Conformal", 0, QApplication::UnicodeUTF8));
-        RBNonConforme->setText(QApplication::translate("CreateCase", "Non conformal", 0, QApplication::UnicodeUTF8));
-        GBTypeNoConf->setTitle(QApplication::translate("CreateCase", "Non conformal option", 0, QApplication::UnicodeUTF8));
-        RB1NpM->setText(QApplication::translate("CreateCase", "1 hanging node per mesh", 0, QApplication::UnicodeUTF8));
-        RB1NpA->setText(QApplication::translate("CreateCase", "1 node per edge", 0, QApplication::UnicodeUTF8));
-        RBQuelconque->setText(QApplication::translate("CreateCase", "Free", 0, QApplication::UnicodeUTF8));
-        CBBoundaryD->setText(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8));
-        CBBoundaryA->setText(QApplication::translate("CreateCase", "Analytical boundary", 0, QApplication::UnicodeUTF8));
-        GBBoundaryD->setTitle(QApplication::translate("CreateCase", "Discrete boundary", 0, QApplication::UnicodeUTF8));
-        PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8));
-        PBBoundaryDiNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8));
-        PBBoundaryDiHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8));
-        GBBoundaryA->setTitle(QApplication::translate("CreateCase", "Analytical boundary", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem = TWBoundary->horizontalHeaderItem(0);
-        ___qtablewidgetitem->setText(QApplication::translate("CreateCase", "a_virer", 0, QApplication::UnicodeUTF8));
-        PBBoundaryAnEdit->setText(QApplication::translate("CreateCase", "Edit", 0, QApplication::UnicodeUTF8));
-        PBBoundaryAnNew->setText(QApplication::translate("CreateCase", "New", 0, QApplication::UnicodeUTF8));
-        PBBoundaryAnHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8));
-        CBAdvanced->setText(QApplication::translate("CreateCase", "Advanced options", 0, QApplication::UnicodeUTF8));
-        GBAdvancedOptions->setTitle(QApplication::translate("CreateCase", "Advanced options", 0, QApplication::UnicodeUTF8));
-        CBPyramid->setText(QApplication::translate("CreateCase", "Authorized pyramids", 0, QApplication::UnicodeUTF8));
-        GroupButtons->setTitle(QString());
-        buttonHelp->setText(QApplication::translate("CreateCase", "Help", 0, QApplication::UnicodeUTF8));
-        buttonApply->setText(QApplication::translate("CreateCase", "Apply", 0, QApplication::UnicodeUTF8));
-        buttonOk->setText(QApplication::translate("CreateCase", "OK", 0, QApplication::UnicodeUTF8));
-        buttonCancel->setText(QApplication::translate("CreateCase", "Cancel", 0, QApplication::UnicodeUTF8));
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateCase: public Ui_CreateCase {};
-} // namespace Ui
-
-QT_END_NAMESPACE
-
-#endif // CREATECASE_H
index 95204dcd88da69862ec7a7cdfae50ce3b0aab551..77c562de36313ccd827eceac7bba7e07deeec7a1 100644 (file)
@@ -6,51 +6,71 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>601</width>
-    <height>1070</height>
+    <width>600</width>
+    <height>1026</height>
    </rect>
   </property>
   <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
+  <property name="minimumSize">
+   <size>
+    <width>600</width>
+    <height>320</height>
+   </size>
+  </property>
+  <property name="sizeIncrement">
+   <size>
+    <width>1</width>
+    <height>1</height>
+   </size>
+  </property>
+  <property name="baseSize">
+   <size>
+    <width>600</width>
+    <height>320</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Create a case</string>
   </property>
   <property name="autoFillBackground">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="0" colspan="4">
-    <layout class="QHBoxLayout">
-     <property name="spacing">
-      <number>6</number>
+  <layout class="QGridLayout" name="gridLayout_5">
+   <item row="0" column="0">
+    <widget class="QWidget" name="WName" native="true">
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
+       <widget class="QLabel" name="Name">
+        <property name="text">
+         <string>Name</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="LEName"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="0" column="2" colspan="2">
+    <spacer name="horizontalSpacer">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
      </property>
-     <property name="margin">
-      <number>0</number>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>199</width>
+       <height>20</height>
+      </size>
      </property>
-     <item>
-      <widget class="QLabel" name="Name">
-       <property name="text">
-        <string>Name</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="LECaseName">
-       <property name="minimumSize">
-        <size>
-         <width>382</width>
-         <height>21</height>
-        </size>
-       </property>
-      </widget>
-     </item>
-    </layout>
+    </spacer>
    </item>
-   <item row="1" column="0" colspan="4">
+   <item row="1" column="0" colspan="5">
     <layout class="QHBoxLayout">
      <property name="spacing">
       <number>6</number>
      </item>
     </layout>
    </item>
-   <item row="2" column="1">
+   <item row="2" column="4">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="3" column="0" colspan="4">
+   <item row="3" column="0" colspan="5">
     <layout class="QHBoxLayout">
      <property name="spacing">
       <number>6</number>
       <number>0</number>
      </property>
      <item>
-      <widget class="QLabel" name="Mesh_2">
+      <widget class="QLabel" name="Mesh">
        <property name="text">
         <string>Mesh</string>
        </property>
      </item>
     </layout>
    </item>
-   <item row="4" column="1" colspan="3">
+   <item row="3" column="5">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="5" column="0">
+   <item row="4" column="0">
     <widget class="QGroupBox" name="GBTypeConf">
      <property name="title">
       <string>Conformity type</string>
      </layout>
     </widget>
    </item>
-   <item row="6" column="1">
-    <spacer>
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>1</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="7" column="0" colspan="3">
-    <widget class="QGroupBox" name="GBTypeNoConf">
-     <property name="title">
-      <string>Non conformal option</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <property name="spacing">
-       <number>6</number>
-      </property>
-      <property name="margin">
-       <number>9</number>
-      </property>
-      <item>
-       <widget class="QRadioButton" name="RB1NpM">
-        <property name="text">
-         <string>1 hanging node per mesh</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="RB1NpA">
-        <property name="text">
-         <string>1 node per edge</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="RBQuelconque">
-        <property name="text">
-         <string>Free</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="8" column="1" colspan="3">
-    <spacer>
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="9" column="0" colspan="2">
+   <item row="5" column="0">
     <layout class="QHBoxLayout">
      <property name="spacing">
       <number>6</number>
      </item>
     </layout>
    </item>
-   <item row="10" column="1">
+   <item row="5" column="3">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>1</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="6" column="2">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="11" column="0" colspan="3">
+   <item row="7" column="0" colspan="4">
     <widget class="QGroupBox" name="GBBoundaryD">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
      </layout>
     </widget>
    </item>
-   <item row="12" column="0" colspan="4">
+   <item row="8" column="0" colspan="6">
     <widget class="QGroupBox" name="GBBoundaryA">
      <property name="minimumSize">
       <size>
      </layout>
     </widget>
    </item>
-   <item row="13" column="0">
+   <item row="9" column="0">
     <spacer name="spacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="14" column="0">
+   <item row="10" column="0">
     <widget class="QCheckBox" name="CBAdvanced">
      <property name="text">
       <string>Advanced options</string>
      </property>
     </widget>
    </item>
-   <item row="15" column="0" colspan="2">
+   <item row="11" column="0" colspan="3">
     <widget class="QGroupBox" name="GBAdvancedOptions">
      <property name="title">
       <string>Advanced options</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
+     <layout class="QGridLayout" name="gridLayout_4">
       <item row="0" column="0">
        <widget class="QCheckBox" name="CBPyramid">
         <property name="text">
         </property>
        </widget>
       </item>
+      <item row="1" column="0">
+       <widget class="QGroupBox" name="GBConforme">
+        <property name="title">
+         <string>Conformity +</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_3">
+         <item row="0" column="0">
+          <layout class="QHBoxLayout" name="horizontalLayout_2">
+           <item>
+            <widget class="QRadioButton" name="RBStandard">
+             <property name="text">
+              <string>Standard</string>
+             </property>
+             <property name="checked">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QRadioButton" name="RBBox">
+             <property name="text">
+              <string>Box</string>
+             </property>
+             <property name="checked">
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QRadioButton" name="RBNC1NpA">
+             <property name="text">
+              <string>1 node per edge</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QRadioButton" name="RBNCQuelconque">
+             <property name="text">
+              <string>Free</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QGroupBox" name="GBFormat">
+        <property name="title">
+         <string>Format</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout">
+         <item row="0" column="0">
+          <widget class="QRadioButton" name="RBMED">
+           <property name="text">
+            <string>MED</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QRadioButton" name="RBSaturne">
+           <property name="text">
+            <string>Saturne</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2">
+          <widget class="QRadioButton" name="RBSaturne2D">
+           <property name="text">
+            <string>Saturne 2D</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
-   <item row="15" column="2" colspan="2">
+   <item row="11" column="5">
     <spacer name="spacer_3">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
     </spacer>
    </item>
-   <item row="16" column="0" colspan="2">
+   <item row="12" column="0">
     <spacer name="spacer_4">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </spacer>
    </item>
-   <item row="17" column="0" colspan="3">
+   <item row="13" column="0">
+    <widget class="QLabel" name="Comment">
+     <property name="text">
+      <string> No comment.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="14" column="0">
     <widget class="QGroupBox" name="GroupButtons">
      <property name="title">
       <string/>
      </layout>
     </widget>
    </item>
-   <item row="17" column="3">
+   <item row="14" column="1">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>35</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="14" column="4" colspan="2">
     <spacer name="spacer_2">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
diff --git a/src/HOMARDGUI/CreateHypothesis.h b/src/HOMARDGUI/CreateHypothesis.h
deleted file mode 100644 (file)
index e40b04b..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
-/********************************************************************************
-** Form generated from reading UI file 'CreateHypothesis.ui'
-**
-** Created: Wed Apr 11 11:35:26 2012
-**      by: Qt User Interface Compiler version 4.6.3
-**
-** WARNING! All changes made in this file will be lost when recompiling UI file!
-********************************************************************************/
-
-#ifndef CREATEHYPOTHESIS_H
-#define CREATEHYPOTHESIS_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QCheckBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialog>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QtGui/QSpacerItem>
-#include <QtGui/QSpinBox>
-#include <QtGui/QTableWidget>
-#include <QtGui/QVBoxLayout>
-
-QT_BEGIN_NAMESPACE
-
-class Ui_CreateHypothesis
-{
-public:
-    QGridLayout *gridLayout_3;
-    QLineEdit *LEHypothesisName;
-    QGroupBox *GBTypeAdaptation;
-    QHBoxLayout *hboxLayout;
-    QRadioButton *RBUniforme;
-    QRadioButton *RBChamp;
-    QRadioButton *RBZone;
-    QGroupBox *GBUniform;
-    QGridLayout *gridLayout;
-    QRadioButton *RBUniDera;
-    QRadioButton *RBUniRaff;
-    QGroupBox *GBFieldFile;
-    QGridLayout *gridLayout1;
-    QLabel *FieldFile;
-    QLineEdit *LEFieldFile;
-    QGroupBox *GBFieldManagement;
-    QGridLayout *gridLayout2;
-    QHBoxLayout *hboxLayout1;
-    QLabel *FieldName;
-    QComboBox *CBFieldName;
-    QSpacerItem *spacerItem;
-    QHBoxLayout *hboxLayout2;
-    QTableWidget *TWCMP;
-    QSpacerItem *spacerItem1;
-    QVBoxLayout *vboxLayout;
-    QHBoxLayout *hboxLayout3;
-    QRadioButton *RBL2;
-    QRadioButton *RBInf;
-    QCheckBox *CBJump;
-    QHBoxLayout *hboxLayout4;
-    QGroupBox *GBRefinementThresholds;
-    QGridLayout *gridLayout3;
-    QRadioButton *RBRPE;
-    QDoubleSpinBox *SpinBox_RPE;
-    QRadioButton *RBRRel;
-    QDoubleSpinBox *SpinBox_RRel;
-    QRadioButton *RBRAbs;
-    QDoubleSpinBox *SpinBox_RAbs;
-    QRadioButton *RBRNo;
-    QGroupBox *GBCoarseningThresholds;
-    QGridLayout *gridLayout4;
-    QRadioButton *RBCPE;
-    QDoubleSpinBox *SpinBox_CPE;
-    QRadioButton *RBCRel;
-    QDoubleSpinBox *SpinBox_CRel;
-    QRadioButton *RBCAbs;
-    QDoubleSpinBox *SpinBox_CAbs;
-    QRadioButton *RBCNo;
-    QGroupBox *GBAreaManagement;
-    QGridLayout *gridLayout_4;
-    QTableWidget *TWZone;
-    QSpacerItem *horizontalSpacer;
-    QVBoxLayout *vboxLayout1;
-    QVBoxLayout *vboxLayout2;
-    QPushButton *PBZoneNew;
-    QPushButton *PBZoneEdit;
-    QPushButton *PBZoneDelete;
-    QSpacerItem *spacerItem2;
-    QGroupBox *GBField;
-    QGridLayout *gridLayout5;
-    QGridLayout *gridLayout6;
-    QRadioButton *RBFieldNo;
-    QRadioButton *RBFieldAll;
-    QRadioButton *RBFieldChosen;
-    QTableWidget *TWField;
-    QCheckBox *CBGroupe;
-    QCheckBox *CBAdvanced;
-    QGroupBox *GBAdvancedOptions;
-    QGridLayout *gridLayout_1;
-    QLabel *TLMinimalDiameter;
-    QDoubleSpinBox *doubleSpinBoxDiamMin;
-    QLabel *TLMaximalLevel;
-    QSpinBox *spinBoxNivMax;
-    QGroupBox *GBAdapInit;
-    QGridLayout *gridLayout_2;
-    QRadioButton *RBAIN;
-    QRadioButton *RBAIR;
-    QRadioButton *RBAID;
-    QGroupBox *GBButtons;
-    QGridLayout *gridLayout7;
-    QPushButton *buttonOk;
-    QPushButton *buttonApply;
-    QPushButton *buttonCancel;
-    QPushButton *buttonHelp;
-    QLabel *Name;
-
-    void setupUi(QDialog *CreateHypothesis)
-    {
-        if (CreateHypothesis->objectName().isEmpty())
-            CreateHypothesis->setObjectName(QString::fromUtf8("CreateHypothesis"));
-        CreateHypothesis->resize(770, 1428);
-        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-        sizePolicy.setHorizontalStretch(0);
-        sizePolicy.setVerticalStretch(0);
-        sizePolicy.setHeightForWidth(CreateHypothesis->sizePolicy().hasHeightForWidth());
-        CreateHypothesis->setSizePolicy(sizePolicy);
-        CreateHypothesis->setAutoFillBackground(true);
-        CreateHypothesis->setSizeGripEnabled(true);
-        gridLayout_3 = new QGridLayout(CreateHypothesis);
-        gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
-        LEHypothesisName = new QLineEdit(CreateHypothesis);
-        LEHypothesisName->setObjectName(QString::fromUtf8("LEHypothesisName"));
-        LEHypothesisName->setMinimumSize(QSize(382, 31));
-        LEHypothesisName->setMaxLength(32);
-
-        gridLayout_3->addWidget(LEHypothesisName, 0, 1, 1, 1);
-
-        GBTypeAdaptation = new QGroupBox(CreateHypothesis);
-        GBTypeAdaptation->setObjectName(QString::fromUtf8("GBTypeAdaptation"));
-        hboxLayout = new QHBoxLayout(GBTypeAdaptation);
-#ifndef Q_OS_MAC
-        hboxLayout->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout->setContentsMargins(9, 9, 9, 9);
-#endif
-        hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
-        RBUniforme = new QRadioButton(GBTypeAdaptation);
-        RBUniforme->setObjectName(QString::fromUtf8("RBUniforme"));
-        RBUniforme->setCheckable(true);
-
-        hboxLayout->addWidget(RBUniforme);
-
-        RBChamp = new QRadioButton(GBTypeAdaptation);
-        RBChamp->setObjectName(QString::fromUtf8("RBChamp"));
-
-        hboxLayout->addWidget(RBChamp);
-
-        RBZone = new QRadioButton(GBTypeAdaptation);
-        RBZone->setObjectName(QString::fromUtf8("RBZone"));
-
-        hboxLayout->addWidget(RBZone);
-
-
-        gridLayout_3->addWidget(GBTypeAdaptation, 1, 0, 1, 2);
-
-        GBUniform = new QGroupBox(CreateHypothesis);
-        GBUniform->setObjectName(QString::fromUtf8("GBUniform"));
-        gridLayout = new QGridLayout(GBUniform);
-#ifndef Q_OS_MAC
-        gridLayout->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-        RBUniDera = new QRadioButton(GBUniform);
-        RBUniDera->setObjectName(QString::fromUtf8("RBUniDera"));
-
-        gridLayout->addWidget(RBUniDera, 0, 1, 1, 1);
-
-        RBUniRaff = new QRadioButton(GBUniform);
-        RBUniRaff->setObjectName(QString::fromUtf8("RBUniRaff"));
-        RBUniRaff->setChecked(true);
-
-        gridLayout->addWidget(RBUniRaff, 0, 0, 1, 1);
-
-
-        gridLayout_3->addWidget(GBUniform, 2, 0, 1, 2);
-
-        GBFieldFile = new QGroupBox(CreateHypothesis);
-        GBFieldFile->setObjectName(QString::fromUtf8("GBFieldFile"));
-        gridLayout1 = new QGridLayout(GBFieldFile);
-#ifndef Q_OS_MAC
-        gridLayout1->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout1->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-        FieldFile = new QLabel(GBFieldFile);
-        FieldFile->setObjectName(QString::fromUtf8("FieldFile"));
-
-        gridLayout1->addWidget(FieldFile, 0, 0, 1, 1);
-
-        LEFieldFile = new QLineEdit(GBFieldFile);
-        LEFieldFile->setObjectName(QString::fromUtf8("LEFieldFile"));
-        LEFieldFile->setMinimumSize(QSize(282, 31));
-
-        gridLayout1->addWidget(LEFieldFile, 0, 1, 1, 1);
-
-
-        gridLayout_3->addWidget(GBFieldFile, 3, 0, 1, 2);
-
-        GBFieldManagement = new QGroupBox(CreateHypothesis);
-        GBFieldManagement->setObjectName(QString::fromUtf8("GBFieldManagement"));
-        sizePolicy.setHeightForWidth(GBFieldManagement->sizePolicy().hasHeightForWidth());
-        GBFieldManagement->setSizePolicy(sizePolicy);
-        gridLayout2 = new QGridLayout(GBFieldManagement);
-#ifndef Q_OS_MAC
-        gridLayout2->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout2->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-        hboxLayout1 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout1->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout1->setContentsMargins(0, 0, 0, 0);
-#endif
-        hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
-        FieldName = new QLabel(GBFieldManagement);
-        FieldName->setObjectName(QString::fromUtf8("FieldName"));
-
-        hboxLayout1->addWidget(FieldName);
-
-        CBFieldName = new QComboBox(GBFieldManagement);
-        CBFieldName->setObjectName(QString::fromUtf8("CBFieldName"));
-        sizePolicy.setHeightForWidth(CBFieldName->sizePolicy().hasHeightForWidth());
-        CBFieldName->setSizePolicy(sizePolicy);
-        CBFieldName->setEditable(false);
-        CBFieldName->setSizeAdjustPolicy(QComboBox::AdjustToContents);
-
-        hboxLayout1->addWidget(CBFieldName);
-
-        spacerItem = new QSpacerItem(48, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-        hboxLayout1->addItem(spacerItem);
-
-
-        gridLayout2->addLayout(hboxLayout1, 0, 0, 1, 1);
-
-        hboxLayout2 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout2->setSpacing(6);
-#endif
-        hboxLayout2->setContentsMargins(0, 0, 0, 0);
-        hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
-        TWCMP = new QTableWidget(GBFieldManagement);
-        if (TWCMP->columnCount() < 2)
-            TWCMP->setColumnCount(2);
-        QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
-        TWCMP->setHorizontalHeaderItem(0, __qtablewidgetitem);
-        QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();
-        TWCMP->setHorizontalHeaderItem(1, __qtablewidgetitem1);
-        TWCMP->setObjectName(QString::fromUtf8("TWCMP"));
-        TWCMP->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked);
-        TWCMP->setShowGrid(true);
-        TWCMP->setRowCount(0);
-        TWCMP->setColumnCount(2);
-
-        hboxLayout2->addWidget(TWCMP);
-
-        spacerItem1 = new QSpacerItem(60, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-        hboxLayout2->addItem(spacerItem1);
-
-        vboxLayout = new QVBoxLayout();
-#ifndef Q_OS_MAC
-        vboxLayout->setSpacing(6);
-#endif
-        vboxLayout->setContentsMargins(0, 0, 0, 0);
-        vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
-        hboxLayout3 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout3->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        hboxLayout3->setContentsMargins(0, 0, 0, 0);
-#endif
-        hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
-        RBL2 = new QRadioButton(GBFieldManagement);
-        RBL2->setObjectName(QString::fromUtf8("RBL2"));
-        RBL2->setChecked(true);
-
-        hboxLayout3->addWidget(RBL2);
-
-        RBInf = new QRadioButton(GBFieldManagement);
-        RBInf->setObjectName(QString::fromUtf8("RBInf"));
-        RBInf->setChecked(false);
-
-        hboxLayout3->addWidget(RBInf);
-
-
-        vboxLayout->addLayout(hboxLayout3);
-
-        CBJump = new QCheckBox(GBFieldManagement);
-        CBJump->setObjectName(QString::fromUtf8("CBJump"));
-
-        vboxLayout->addWidget(CBJump);
-
-
-        hboxLayout2->addLayout(vboxLayout);
-
-
-        gridLayout2->addLayout(hboxLayout2, 1, 0, 1, 1);
-
-        hboxLayout4 = new QHBoxLayout();
-#ifndef Q_OS_MAC
-        hboxLayout4->setSpacing(6);
-#endif
-        hboxLayout4->setContentsMargins(0, 0, 0, 0);
-        hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4"));
-        GBRefinementThresholds = new QGroupBox(GBFieldManagement);
-        GBRefinementThresholds->setObjectName(QString::fromUtf8("GBRefinementThresholds"));
-        sizePolicy.setHeightForWidth(GBRefinementThresholds->sizePolicy().hasHeightForWidth());
-        GBRefinementThresholds->setSizePolicy(sizePolicy);
-        gridLayout3 = new QGridLayout(GBRefinementThresholds);
-#ifndef Q_OS_MAC
-        gridLayout3->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout3->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
-        RBRPE = new QRadioButton(GBRefinementThresholds);
-        RBRPE->setObjectName(QString::fromUtf8("RBRPE"));
-        RBRPE->setCheckable(true);
-        RBRPE->setChecked(true);
-
-        gridLayout3->addWidget(RBRPE, 0, 0, 1, 1);
-
-        SpinBox_RPE = new QDoubleSpinBox(GBRefinementThresholds);
-        SpinBox_RPE->setObjectName(QString::fromUtf8("SpinBox_RPE"));
-        SpinBox_RPE->setDecimals(3);
-        SpinBox_RPE->setMaximum(100);
-        SpinBox_RPE->setSingleStep(0.1);
-        SpinBox_RPE->setValue(2);
-
-        gridLayout3->addWidget(SpinBox_RPE, 0, 1, 1, 1);
-
-        RBRRel = new QRadioButton(GBRefinementThresholds);
-        RBRRel->setObjectName(QString::fromUtf8("RBRRel"));
-
-        gridLayout3->addWidget(RBRRel, 1, 0, 1, 1);
-
-        SpinBox_RRel = new QDoubleSpinBox(GBRefinementThresholds);
-        SpinBox_RRel->setObjectName(QString::fromUtf8("SpinBox_RRel"));
-        SpinBox_RRel->setEnabled(false);
-        SpinBox_RRel->setDecimals(3);
-        SpinBox_RRel->setMaximum(100);
-        SpinBox_RRel->setSingleStep(0.1);
-
-        gridLayout3->addWidget(SpinBox_RRel, 1, 1, 1, 1);
-
-        RBRAbs = new QRadioButton(GBRefinementThresholds);
-        RBRAbs->setObjectName(QString::fromUtf8("RBRAbs"));
-
-        gridLayout3->addWidget(RBRAbs, 2, 0, 1, 1);
-
-        SpinBox_RAbs = new QDoubleSpinBox(GBRefinementThresholds);
-        SpinBox_RAbs->setObjectName(QString::fromUtf8("SpinBox_RAbs"));
-        SpinBox_RAbs->setEnabled(false);
-        SpinBox_RAbs->setDecimals(8);
-        SpinBox_RAbs->setMinimum(-1e+12);
-        SpinBox_RAbs->setMaximum(1e+12);
-        SpinBox_RAbs->setSingleStep(0.1);
-
-        gridLayout3->addWidget(SpinBox_RAbs, 2, 1, 1, 1);
-
-        RBRNo = new QRadioButton(GBRefinementThresholds);
-        RBRNo->setObjectName(QString::fromUtf8("RBRNo"));
-
-        gridLayout3->addWidget(RBRNo, 3, 0, 1, 1);
-
-
-        hboxLayout4->addWidget(GBRefinementThresholds);
-
-        GBCoarseningThresholds = new QGroupBox(GBFieldManagement);
-        GBCoarseningThresholds->setObjectName(QString::fromUtf8("GBCoarseningThresholds"));
-        gridLayout4 = new QGridLayout(GBCoarseningThresholds);
-#ifndef Q_OS_MAC
-        gridLayout4->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout4->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout4->setObjectName(QString::fromUtf8("gridLayout4"));
-        RBCPE = new QRadioButton(GBCoarseningThresholds);
-        RBCPE->setObjectName(QString::fromUtf8("RBCPE"));
-        RBCPE->setCheckable(true);
-        RBCPE->setChecked(false);
-
-        gridLayout4->addWidget(RBCPE, 0, 0, 1, 1);
-
-        SpinBox_CPE = new QDoubleSpinBox(GBCoarseningThresholds);
-        SpinBox_CPE->setObjectName(QString::fromUtf8("SpinBox_CPE"));
-        SpinBox_CPE->setEnabled(false);
-        SpinBox_CPE->setDecimals(3);
-        SpinBox_CPE->setMaximum(100);
-        SpinBox_CPE->setSingleStep(0.1);
-
-        gridLayout4->addWidget(SpinBox_CPE, 0, 1, 1, 1);
-
-        RBCRel = new QRadioButton(GBCoarseningThresholds);
-        RBCRel->setObjectName(QString::fromUtf8("RBCRel"));
-
-        gridLayout4->addWidget(RBCRel, 1, 0, 1, 1);
-
-        SpinBox_CRel = new QDoubleSpinBox(GBCoarseningThresholds);
-        SpinBox_CRel->setObjectName(QString::fromUtf8("SpinBox_CRel"));
-        SpinBox_CRel->setEnabled(false);
-        SpinBox_CRel->setDecimals(3);
-        SpinBox_CRel->setMaximum(100);
-        SpinBox_CRel->setSingleStep(0.1);
-
-        gridLayout4->addWidget(SpinBox_CRel, 1, 1, 1, 1);
-
-        RBCAbs = new QRadioButton(GBCoarseningThresholds);
-        RBCAbs->setObjectName(QString::fromUtf8("RBCAbs"));
-
-        gridLayout4->addWidget(RBCAbs, 2, 0, 1, 1);
-
-        SpinBox_CAbs = new QDoubleSpinBox(GBCoarseningThresholds);
-        SpinBox_CAbs->setObjectName(QString::fromUtf8("SpinBox_CAbs"));
-        SpinBox_CAbs->setEnabled(false);
-        SpinBox_CAbs->setDecimals(8);
-        SpinBox_CAbs->setMinimum(-1e+12);
-        SpinBox_CAbs->setMaximum(1e+12);
-        SpinBox_CAbs->setSingleStep(0.1);
-
-        gridLayout4->addWidget(SpinBox_CAbs, 2, 1, 1, 1);
-
-        RBCNo = new QRadioButton(GBCoarseningThresholds);
-        RBCNo->setObjectName(QString::fromUtf8("RBCNo"));
-        RBCNo->setChecked(true);
-
-        gridLayout4->addWidget(RBCNo, 3, 0, 1, 1);
-
-
-        hboxLayout4->addWidget(GBCoarseningThresholds);
-
-
-        gridLayout2->addLayout(hboxLayout4, 2, 0, 1, 1);
-
-
-        gridLayout_3->addWidget(GBFieldManagement, 4, 0, 1, 2);
-
-        GBAreaManagement = new QGroupBox(CreateHypothesis);
-        GBAreaManagement->setObjectName(QString::fromUtf8("GBAreaManagement"));
-        sizePolicy.setHeightForWidth(GBAreaManagement->sizePolicy().hasHeightForWidth());
-        GBAreaManagement->setSizePolicy(sizePolicy);
-        gridLayout_4 = new QGridLayout(GBAreaManagement);
-        gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
-        TWZone = new QTableWidget(GBAreaManagement);
-        if (TWZone->columnCount() < 3)
-            TWZone->setColumnCount(3);
-        QTableWidgetItem *__qtablewidgetitem2 = new QTableWidgetItem();
-        TWZone->setHorizontalHeaderItem(0, __qtablewidgetitem2);
-        QTableWidgetItem *__qtablewidgetitem3 = new QTableWidgetItem();
-        TWZone->setHorizontalHeaderItem(1, __qtablewidgetitem3);
-        QTableWidgetItem *__qtablewidgetitem4 = new QTableWidgetItem();
-        TWZone->setHorizontalHeaderItem(2, __qtablewidgetitem4);
-        TWZone->setObjectName(QString::fromUtf8("TWZone"));
-        TWZone->setMinimumSize(QSize(400, 0));
-        TWZone->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked);
-        TWZone->setShowGrid(true);
-        TWZone->setRowCount(0);
-        TWZone->setColumnCount(3);
-
-        gridLayout_4->addWidget(TWZone, 0, 0, 1, 1);
-
-        horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-        gridLayout_4->addItem(horizontalSpacer, 0, 1, 1, 1);
-
-        vboxLayout1 = new QVBoxLayout();
-#ifndef Q_OS_MAC
-        vboxLayout1->setSpacing(6);
-#endif
-        vboxLayout1->setContentsMargins(0, 0, 0, 0);
-        vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
-        vboxLayout2 = new QVBoxLayout();
-#ifndef Q_OS_MAC
-        vboxLayout2->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        vboxLayout2->setContentsMargins(0, 0, 0, 0);
-#endif
-        vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
-        PBZoneNew = new QPushButton(GBAreaManagement);
-        PBZoneNew->setObjectName(QString::fromUtf8("PBZoneNew"));
-
-        vboxLayout2->addWidget(PBZoneNew);
-
-        PBZoneEdit = new QPushButton(GBAreaManagement);
-        PBZoneEdit->setObjectName(QString::fromUtf8("PBZoneEdit"));
-
-        vboxLayout2->addWidget(PBZoneEdit);
-
-        PBZoneDelete = new QPushButton(GBAreaManagement);
-        PBZoneDelete->setObjectName(QString::fromUtf8("PBZoneDelete"));
-
-        vboxLayout2->addWidget(PBZoneDelete);
-
-
-        vboxLayout1->addLayout(vboxLayout2);
-
-        spacerItem2 = new QSpacerItem(20, 48, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        vboxLayout1->addItem(spacerItem2);
-
-
-        gridLayout_4->addLayout(vboxLayout1, 0, 2, 1, 1);
-
-
-        gridLayout_3->addWidget(GBAreaManagement, 5, 0, 1, 2);
-
-        GBField = new QGroupBox(CreateHypothesis);
-        GBField->setObjectName(QString::fromUtf8("GBField"));
-        gridLayout5 = new QGridLayout(GBField);
-#ifndef Q_OS_MAC
-        gridLayout5->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout5->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout5->setObjectName(QString::fromUtf8("gridLayout5"));
-        gridLayout6 = new QGridLayout();
-#ifndef Q_OS_MAC
-        gridLayout6->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout6->setContentsMargins(0, 0, 0, 0);
-#endif
-        gridLayout6->setObjectName(QString::fromUtf8("gridLayout6"));
-        RBFieldNo = new QRadioButton(GBField);
-        RBFieldNo->setObjectName(QString::fromUtf8("RBFieldNo"));
-        RBFieldNo->setChecked(true);
-
-        gridLayout6->addWidget(RBFieldNo, 0, 0, 1, 1);
-
-        RBFieldAll = new QRadioButton(GBField);
-        RBFieldAll->setObjectName(QString::fromUtf8("RBFieldAll"));
-        RBFieldAll->setChecked(false);
-
-        gridLayout6->addWidget(RBFieldAll, 0, 1, 1, 1);
-
-        RBFieldChosen = new QRadioButton(GBField);
-        RBFieldChosen->setObjectName(QString::fromUtf8("RBFieldChosen"));
-        RBFieldChosen->setChecked(false);
-
-        gridLayout6->addWidget(RBFieldChosen, 0, 2, 1, 1);
-
-
-        gridLayout5->addLayout(gridLayout6, 0, 0, 1, 1);
-
-        TWField = new QTableWidget(GBField);
-        if (TWField->columnCount() < 2)
-            TWField->setColumnCount(2);
-        QTableWidgetItem *__qtablewidgetitem5 = new QTableWidgetItem();
-        TWField->setHorizontalHeaderItem(0, __qtablewidgetitem5);
-        QTableWidgetItem *__qtablewidgetitem6 = new QTableWidgetItem();
-        TWField->setHorizontalHeaderItem(1, __qtablewidgetitem6);
-        TWField->setObjectName(QString::fromUtf8("TWField"));
-
-        gridLayout5->addWidget(TWField, 1, 0, 1, 1);
-
-
-        gridLayout_3->addWidget(GBField, 6, 0, 1, 2);
-
-        CBGroupe = new QCheckBox(CreateHypothesis);
-        CBGroupe->setObjectName(QString::fromUtf8("CBGroupe"));
-
-        gridLayout_3->addWidget(CBGroupe, 7, 0, 1, 2);
-
-        CBAdvanced = new QCheckBox(CreateHypothesis);
-        CBAdvanced->setObjectName(QString::fromUtf8("CBAdvanced"));
-
-        gridLayout_3->addWidget(CBAdvanced, 8, 0, 1, 2);
-
-        GBAdvancedOptions = new QGroupBox(CreateHypothesis);
-        GBAdvancedOptions->setObjectName(QString::fromUtf8("GBAdvancedOptions"));
-        gridLayout_1 = new QGridLayout(GBAdvancedOptions);
-        gridLayout_1->setObjectName(QString::fromUtf8("gridLayout_1"));
-        TLMinimalDiameter = new QLabel(GBAdvancedOptions);
-        TLMinimalDiameter->setObjectName(QString::fromUtf8("TLMinimalDiameter"));
-        sizePolicy.setHeightForWidth(TLMinimalDiameter->sizePolicy().hasHeightForWidth());
-        TLMinimalDiameter->setSizePolicy(sizePolicy);
-        TLMinimalDiameter->setWordWrap(false);
-
-        gridLayout_1->addWidget(TLMinimalDiameter, 0, 0, 1, 1);
-
-        doubleSpinBoxDiamMin = new QDoubleSpinBox(GBAdvancedOptions);
-        doubleSpinBoxDiamMin->setObjectName(QString::fromUtf8("doubleSpinBoxDiamMin"));
-        doubleSpinBoxDiamMin->setDecimals(5);
-
-        gridLayout_1->addWidget(doubleSpinBoxDiamMin, 0, 1, 1, 1);
-
-        TLMaximalLevel = new QLabel(GBAdvancedOptions);
-        TLMaximalLevel->setObjectName(QString::fromUtf8("TLMaximalLevel"));
-        sizePolicy.setHeightForWidth(TLMaximalLevel->sizePolicy().hasHeightForWidth());
-        TLMaximalLevel->setSizePolicy(sizePolicy);
-        TLMaximalLevel->setWordWrap(false);
-
-        gridLayout_1->addWidget(TLMaximalLevel, 1, 0, 1, 1);
-
-        spinBoxNivMax = new QSpinBox(GBAdvancedOptions);
-        spinBoxNivMax->setObjectName(QString::fromUtf8("spinBoxNivMax"));
-        spinBoxNivMax->setValue(99);
-
-        gridLayout_1->addWidget(spinBoxNivMax, 1, 1, 1, 1);
-
-        GBAdapInit = new QGroupBox(GBAdvancedOptions);
-        GBAdapInit->setObjectName(QString::fromUtf8("GBAdapInit"));
-        gridLayout_2 = new QGridLayout(GBAdapInit);
-        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
-        RBAIN = new QRadioButton(GBAdapInit);
-        RBAIN->setObjectName(QString::fromUtf8("RBAIN"));
-        RBAIN->setChecked(true);
-
-        gridLayout_2->addWidget(RBAIN, 0, 0, 1, 1);
-
-        RBAIR = new QRadioButton(GBAdapInit);
-        RBAIR->setObjectName(QString::fromUtf8("RBAIR"));
-
-        gridLayout_2->addWidget(RBAIR, 0, 1, 1, 1);
-
-        RBAID = new QRadioButton(GBAdapInit);
-        RBAID->setObjectName(QString::fromUtf8("RBAID"));
-
-        gridLayout_2->addWidget(RBAID, 0, 2, 1, 1);
-
-
-        gridLayout_1->addWidget(GBAdapInit, 2, 0, 1, 2);
-
-
-        gridLayout_3->addWidget(GBAdvancedOptions, 9, 0, 1, 2);
-
-        GBButtons = new QGroupBox(CreateHypothesis);
-        GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
-        gridLayout7 = new QGridLayout(GBButtons);
-#ifndef Q_OS_MAC
-        gridLayout7->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout7->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout7->setObjectName(QString::fromUtf8("gridLayout7"));
-        buttonOk = new QPushButton(GBButtons);
-        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-
-        gridLayout7->addWidget(buttonOk, 0, 0, 1, 1);
-
-        buttonApply = new QPushButton(GBButtons);
-        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-        gridLayout7->addWidget(buttonApply, 0, 1, 1, 1);
-
-        buttonCancel = new QPushButton(GBButtons);
-        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-        gridLayout7->addWidget(buttonCancel, 0, 2, 1, 1);
-
-        buttonHelp = new QPushButton(GBButtons);
-        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-        gridLayout7->addWidget(buttonHelp, 0, 3, 1, 1);
-
-
-        gridLayout_3->addWidget(GBButtons, 10, 0, 1, 2);
-
-        Name = new QLabel(CreateHypothesis);
-        Name->setObjectName(QString::fromUtf8("Name"));
-
-        gridLayout_3->addWidget(Name, 0, 0, 1, 1);
-
-        LEHypothesisName->raise();
-        GBTypeAdaptation->raise();
-        GBUniform->raise();
-        GBFieldFile->raise();
-        GBFieldManagement->raise();
-        GBAreaManagement->raise();
-        GBField->raise();
-        CBGroupe->raise();
-        CBAdvanced->raise();
-        GBAdvancedOptions->raise();
-        GBButtons->raise();
-        Name->raise();
-
-        retranslateUi(CreateHypothesis);
-
-        QMetaObject::connectSlotsByName(CreateHypothesis);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateHypothesis)
-    {
-        CreateHypothesis->setWindowTitle(QApplication::translate("CreateHypothesis", "Create an hypothesis", 0, QApplication::UnicodeUTF8));
-        GBTypeAdaptation->setTitle(QApplication::translate("CreateHypothesis", "Type of adaptation", 0, QApplication::UnicodeUTF8));
-        RBUniforme->setText(QApplication::translate("CreateHypothesis", "Uniform", 0, QApplication::UnicodeUTF8));
-        RBChamp->setText(QApplication::translate("CreateHypothesis", "Driven by a field", 0, QApplication::UnicodeUTF8));
-        RBZone->setText(QApplication::translate("CreateHypothesis", "With geometrical zones", 0, QApplication::UnicodeUTF8));
-        GBUniform->setTitle(QApplication::translate("CreateHypothesis", "Uniform adaptation", 0, QApplication::UnicodeUTF8));
-        RBUniDera->setText(QApplication::translate("CreateHypothesis", "Coarsening", 0, QApplication::UnicodeUTF8));
-        RBUniRaff->setText(QApplication::translate("CreateHypothesis", "Refinement", 0, QApplication::UnicodeUTF8));
-        GBFieldFile->setTitle(QString());
-        FieldFile->setText(QApplication::translate("CreateHypothesis", "File of the fields", 0, QApplication::UnicodeUTF8));
-        GBFieldManagement->setTitle(QApplication::translate("CreateHypothesis", "Governing field for the adaptation", 0, QApplication::UnicodeUTF8));
-        FieldName->setText(QApplication::translate("CreateHypothesis", "Field name", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem = TWCMP->horizontalHeaderItem(0);
-        ___qtablewidgetitem->setText(QApplication::translate("CreateHypothesis", "Selection", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem1 = TWCMP->horizontalHeaderItem(1);
-        ___qtablewidgetitem1->setText(QApplication::translate("CreateHypothesis", "Component", 0, QApplication::UnicodeUTF8));
-        RBL2->setText(QApplication::translate("CreateHypothesis", "L2 norm", 0, QApplication::UnicodeUTF8));
-        RBInf->setText(QApplication::translate("CreateHypothesis", "Infinite norm", 0, QApplication::UnicodeUTF8));
-        CBJump->setText(QApplication::translate("CreateHypothesis", "Jump between elements", 0, QApplication::UnicodeUTF8));
-        GBRefinementThresholds->setTitle(QApplication::translate("CreateHypothesis", "Refinement threshold", 0, QApplication::UnicodeUTF8));
-        RBRPE->setText(QApplication::translate("CreateHypothesis", "Percentage of meshes", 0, QApplication::UnicodeUTF8));
-        SpinBox_RPE->setSuffix(QApplication::translate("CreateHypothesis", " %", 0, QApplication::UnicodeUTF8));
-        RBRRel->setText(QApplication::translate("CreateHypothesis", "Relative", 0, QApplication::UnicodeUTF8));
-        SpinBox_RRel->setSuffix(QApplication::translate("CreateHypothesis", " %", 0, QApplication::UnicodeUTF8));
-        RBRAbs->setText(QApplication::translate("CreateHypothesis", "Absolute", 0, QApplication::UnicodeUTF8));
-        RBRNo->setText(QApplication::translate("CreateHypothesis", "No refinement", 0, QApplication::UnicodeUTF8));
-        GBCoarseningThresholds->setTitle(QApplication::translate("CreateHypothesis", "Coarsening threshold", 0, QApplication::UnicodeUTF8));
-        RBCPE->setText(QApplication::translate("CreateHypothesis", "Percentage of meshes", 0, QApplication::UnicodeUTF8));
-        SpinBox_CPE->setSuffix(QApplication::translate("CreateHypothesis", " %", 0, QApplication::UnicodeUTF8));
-        RBCRel->setText(QApplication::translate("CreateHypothesis", "Relative", 0, QApplication::UnicodeUTF8));
-        SpinBox_CRel->setSuffix(QApplication::translate("CreateHypothesis", " %", 0, QApplication::UnicodeUTF8));
-        RBCAbs->setText(QApplication::translate("CreateHypothesis", "Absolute", 0, QApplication::UnicodeUTF8));
-        RBCNo->setText(QApplication::translate("CreateHypothesis", "No coarsening", 0, QApplication::UnicodeUTF8));
-        GBAreaManagement->setTitle(QApplication::translate("CreateHypothesis", "Zone management", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem2 = TWZone->horizontalHeaderItem(0);
-        ___qtablewidgetitem2->setText(QApplication::translate("CreateHypothesis", "Refinement", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem3 = TWZone->horizontalHeaderItem(1);
-        ___qtablewidgetitem3->setText(QApplication::translate("CreateHypothesis", "Coarsening", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem4 = TWZone->horizontalHeaderItem(2);
-        ___qtablewidgetitem4->setText(QApplication::translate("CreateHypothesis", "Zone name", 0, QApplication::UnicodeUTF8));
-        PBZoneNew->setText(QApplication::translate("CreateHypothesis", "New", 0, QApplication::UnicodeUTF8));
-        PBZoneEdit->setText(QApplication::translate("CreateHypothesis", "Edit", 0, QApplication::UnicodeUTF8));
-        PBZoneDelete->setText(QString());
-        GBField->setTitle(QApplication::translate("CreateHypothesis", "Field Interpolation", 0, QApplication::UnicodeUTF8));
-        RBFieldNo->setText(QApplication::translate("CreateHypothesis", "None", 0, QApplication::UnicodeUTF8));
-        RBFieldAll->setText(QApplication::translate("CreateHypothesis", "All", 0, QApplication::UnicodeUTF8));
-        RBFieldChosen->setText(QApplication::translate("CreateHypothesis", "Chosen", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem5 = TWField->horizontalHeaderItem(0);
-        ___qtablewidgetitem5->setText(QApplication::translate("CreateHypothesis", "Selection", 0, QApplication::UnicodeUTF8));
-        QTableWidgetItem *___qtablewidgetitem6 = TWField->horizontalHeaderItem(1);
-        ___qtablewidgetitem6->setText(QApplication::translate("CreateHypothesis", "Field Name", 0, QApplication::UnicodeUTF8));
-        CBGroupe->setText(QApplication::translate("CreateHypothesis", "Filtering with groups", 0, QApplication::UnicodeUTF8));
-        CBAdvanced->setText(QApplication::translate("CreateHypothesis", "Advanced options", 0, QApplication::UnicodeUTF8));
-        GBAdvancedOptions->setTitle(QApplication::translate("CreateHypothesis", "Advanced options", 0, QApplication::UnicodeUTF8));
-        TLMinimalDiameter->setText(QApplication::translate("CreateHypothesis", "Minimal diameter", 0, QApplication::UnicodeUTF8));
-        TLMaximalLevel->setText(QApplication::translate("CreateHypothesis", "Maximal level", 0, QApplication::UnicodeUTF8));
-        GBAdapInit->setTitle(QApplication::translate("CreateHypothesis", "Initialization of adaptation", 0, QApplication::UnicodeUTF8));
-        RBAIN->setText(QApplication::translate("CreateHypothesis", "Nothing", 0, QApplication::UnicodeUTF8));
-        RBAIR->setText(QApplication::translate("CreateHypothesis", "Refinement", 0, QApplication::UnicodeUTF8));
-        RBAID->setText(QApplication::translate("CreateHypothesis", "Coarsening", 0, QApplication::UnicodeUTF8));
-        GBButtons->setTitle(QString());
-        buttonOk->setText(QApplication::translate("CreateHypothesis", "OK", 0, QApplication::UnicodeUTF8));
-        buttonApply->setText(QApplication::translate("CreateHypothesis", "Apply", 0, QApplication::UnicodeUTF8));
-        buttonCancel->setText(QApplication::translate("CreateHypothesis", "Cancel", 0, QApplication::UnicodeUTF8));
-        buttonHelp->setText(QApplication::translate("CreateHypothesis", "Help", 0, QApplication::UnicodeUTF8));
-        Name->setText(QApplication::translate("CreateHypothesis", "Name", 0, QApplication::UnicodeUTF8));
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateHypothesis: public Ui_CreateHypothesis {};
-} // namespace Ui
-
-QT_END_NAMESPACE
-
-#endif // CREATEHYPOTHESIS_H
index 686a25ab7de3592309abe79b30534e7d96816977..00c65dc81a764aa88c1090c21e531e76d5c89053 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>CreateHypothesis</class>
- <widget class="QDialog" name="CreateHypothesis">
+ <widget class="QScrollArea" name="CreateHypothesis">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>770</width>
-    <height>1428</height>
+    <width>848</width>
+    <height>1650</height>
    </rect>
   </property>
   <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
+  <property name="minimumSize">
+   <size>
+    <width>800</width>
+    <height>600</height>
+   </size>
+  </property>
+  <property name="sizeIncrement">
+   <size>
+    <width>1</width>
+    <height>1</height>
+   </size>
+  </property>
+  <property name="baseSize">
+   <size>
+    <width>800</width>
+    <height>1200</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Create an hypothesis</string>
   </property>
-  <property name="autoFillBackground">
+  <property name="widgetResizable">
    <bool>true</bool>
   </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_3">
-   <item row="0" column="1">
-    <widget class="QLineEdit" name="LEHypothesisName">
-     <property name="minimumSize">
-      <size>
-       <width>382</width>
-       <height>31</height>
-      </size>
-     </property>
-     <property name="maxLength">
-      <number>32</number>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBTypeAdaptation">
-     <property name="title">
-      <string>Type of adaptation</string>
-     </property>
-     <layout class="QHBoxLayout">
-      <property name="spacing">
-       <number>6</number>
+  <widget class="QWidget" name="scrollAreaWidgetContents">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>844</width>
+     <height>1646</height>
+    </rect>
+   </property>
+   <property name="sizeGripEnabled" stdset="0">
+    <bool>true</bool>
+   </property>
+   <layout class="QGridLayout" name="gridLayout_5">
+    <item row="0" column="0">
+     <widget class="QWidget" name="WName" native="true">
+      <layout class="QGridLayout" name="gridLayout">
+       <item row="0" column="0">
+        <widget class="QLabel" name="Name">
+         <property name="text">
+          <string>Name</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="LEName">
+         <property name="minimumSize">
+          <size>
+           <width>282</width>
+           <height>31</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <spacer name="horizontalSpacer_9">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
       </property>
-      <property name="margin">
-       <number>9</number>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>224</width>
+        <height>20</height>
+       </size>
       </property>
-      <item>
-       <widget class="QRadioButton" name="RBUniforme">
-        <property name="text">
-         <string>Uniform</string>
-        </property>
-        <property name="checkable">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="RBChamp">
-        <property name="text">
-         <string>Driven by a field</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="RBZone">
-        <property name="text">
-         <string>With geometrical zones</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="2" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBUniform">
-     <property name="title">
-      <string>Uniform adaptation</string>
-     </property>
-     <layout class="QGridLayout">
-      <property name="margin">
-       <number>9</number>
+     </spacer>
+    </item>
+    <item row="1" column="0">
+     <widget class="QGroupBox" name="GBTypeAdaptation">
+      <property name="title">
+       <string>Type of adaptation</string>
       </property>
-      <property name="spacing">
-       <number>6</number>
+      <layout class="QHBoxLayout">
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <item>
+        <widget class="QRadioButton" name="RBUniforme">
+         <property name="text">
+          <string>Uniform</string>
+         </property>
+         <property name="checkable">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QRadioButton" name="RBChamp">
+         <property name="text">
+          <string>Driven by a field</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QRadioButton" name="RBZone">
+         <property name="text">
+          <string>With geometrical zones</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <spacer name="horizontalSpacer_6">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
       </property>
-      <item row="0" column="1">
-       <widget class="QRadioButton" name="RBUniDera">
-        <property name="text">
-         <string>Coarsening</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0">
-       <widget class="QRadioButton" name="RBUniRaff">
-        <property name="text">
-         <string>Refinement</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="3" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBFieldFile">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QGridLayout">
-      <property name="margin">
-       <number>9</number>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>20</height>
+       </size>
       </property>
-      <property name="spacing">
-       <number>6</number>
+     </spacer>
+    </item>
+    <item row="2" column="0">
+     <widget class="QCheckBox" name="CBGroupe">
+      <property name="text">
+       <string>Filtering with groups</string>
       </property>
-      <item row="0" column="0">
-       <widget class="QLabel" name="FieldFile">
-        <property name="text">
-         <string>File of the fields</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QLineEdit" name="LEFieldFile">
-        <property name="minimumSize">
-         <size>
-          <width>282</width>
-          <height>31</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="4" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBFieldManagement">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title">
-      <string>Governing field for the adaptation</string>
-     </property>
-     <layout class="QGridLayout">
-      <property name="margin">
-       <number>9</number>
+     </widget>
+    </item>
+    <item row="2" column="2">
+     <spacer name="horizontalSpacer_8">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
       </property>
-      <property name="spacing">
-       <number>6</number>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
       </property>
-      <item row="0" column="0">
-       <layout class="QHBoxLayout">
-        <property name="spacing">
-         <number>6</number>
-        </property>
-        <property name="margin">
-         <number>0</number>
-        </property>
-        <item>
-         <widget class="QLabel" name="FieldName">
-          <property name="text">
-           <string>Field name</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QComboBox" name="CBFieldName">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="editable">
-           <bool>false</bool>
-          </property>
-          <property name="sizeAdjustPolicy">
-           <enum>QComboBox::AdjustToContents</enum>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>48</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-      <item row="1" column="0">
-       <layout class="QHBoxLayout">
-        <property name="spacing">
-         <number>6</number>
-        </property>
-        <property name="margin">
-         <number>0</number>
-        </property>
-        <item>
-         <widget class="QTableWidget" name="TWCMP">
-          <property name="editTriggers">
-           <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
-          </property>
-          <property name="showGrid">
-           <bool>true</bool>
-          </property>
-          <property name="rowCount">
-           <number>0</number>
-          </property>
-          <property name="columnCount">
-           <number>2</number>
-          </property>
-          <column>
+     </spacer>
+    </item>
+    <item row="3" column="0">
+     <widget class="QGroupBox" name="GBUniform">
+      <property name="title">
+       <string>Uniform adaptation</string>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="1">
+        <widget class="QRadioButton" name="RBUniDera">
+         <property name="text">
+          <string>Coarsening</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QRadioButton" name="RBUniRaff">
+         <property name="text">
+          <string>Refinement</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="3" column="2">
+     <spacer name="horizontalSpacer_7">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="4" column="0">
+     <widget class="QGroupBox" name="GBFieldFile">
+      <property name="title">
+       <string/>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <widget class="QLabel" name="FieldFile">
+         <property name="text">
+          <string>File of the fields</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="LEFieldFile">
+         <property name="minimumSize">
+          <size>
+           <width>282</width>
+           <height>31</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="5" column="0" colspan="3">
+     <widget class="QGroupBox" name="GBFieldManagement">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="title">
+       <string>Governing field for the adaptation</string>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <layout class="QHBoxLayout">
+         <property name="spacing">
+          <number>6</number>
+         </property>
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QLabel" name="FieldName">
            <property name="text">
-            <string>Selection</string>
+            <string>Field name</string>
            </property>
-          </column>
-          <column>
-           <property name="text">
-            <string>Component</string>
+          </widget>
+         </item>
+         <item>
+          <widget class="QComboBox" name="CBFieldName">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
            </property>
-          </column>
-         </widget>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>60</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <layout class="QVBoxLayout">
-          <property name="spacing">
-           <number>6</number>
-          </property>
-          <property name="margin">
-           <number>0</number>
-          </property>
-          <item>
-           <layout class="QHBoxLayout">
-            <property name="spacing">
-             <number>6</number>
+           <property name="editable">
+            <bool>false</bool>
+           </property>
+           <property name="sizeAdjustPolicy">
+            <enum>QComboBox::AdjustToContents</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer>
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>48</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="0">
+        <layout class="QHBoxLayout">
+         <property name="spacing">
+          <number>6</number>
+         </property>
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QTableWidget" name="TWCMP">
+           <property name="editTriggers">
+            <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
+           </property>
+           <property name="showGrid">
+            <bool>true</bool>
+           </property>
+           <property name="rowCount">
+            <number>0</number>
+           </property>
+           <property name="columnCount">
+            <number>2</number>
+           </property>
+           <column>
+            <property name="text">
+             <string>Selection</string>
             </property>
+           </column>
+           <column>
+            <property name="text">
+             <string>Component</string>
+            </property>
+           </column>
+          </widget>
+         </item>
+         <item>
+          <spacer>
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>60</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QVBoxLayout">
+           <property name="spacing">
+            <number>6</number>
+           </property>
+           <property name="margin">
+            <number>0</number>
+           </property>
+           <item>
+            <layout class="QHBoxLayout">
+             <property name="spacing">
+              <number>6</number>
+             </property>
+             <property name="margin">
+              <number>0</number>
+             </property>
+             <item>
+              <widget class="QRadioButton" name="RBL2">
+               <property name="text">
+                <string>L2 norm</string>
+               </property>
+               <property name="checked">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QRadioButton" name="RBInf">
+               <property name="text">
+                <string>Infinite norm</string>
+               </property>
+               <property name="checked">
+                <bool>false</bool>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="CBJump">
+             <property name="text">
+              <string>Jump between elements</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item row="2" column="0">
+        <layout class="QHBoxLayout">
+         <property name="spacing">
+          <number>6</number>
+         </property>
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QGroupBox" name="GBRefinementThresholds">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="title">
+            <string>Refinement threshold</string>
+           </property>
+           <layout class="QGridLayout">
             <property name="margin">
-             <number>0</number>
+             <number>9</number>
+            </property>
+            <property name="spacing">
+             <number>6</number>
             </property>
-            <item>
-             <widget class="QRadioButton" name="RBL2">
+            <item row="0" column="0">
+             <widget class="QRadioButton" name="RBRPE">
               <property name="text">
-               <string>L2 norm</string>
+               <string>Percentage of meshes</string>
+              </property>
+              <property name="checkable">
+               <bool>true</bool>
               </property>
               <property name="checked">
                <bool>true</bool>
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QRadioButton" name="RBInf">
+            <item row="0" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_RPE">
+              <property name="suffix">
+               <string> %</string>
+              </property>
+              <property name="decimals">
+               <number>3</number>
+              </property>
+              <property name="maximum">
+               <double>100.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+              <property name="value">
+               <double>2.000000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QRadioButton" name="RBRRel">
               <property name="text">
-               <string>Infinite norm</string>
+               <string>Relative</string>
               </property>
-              <property name="checked">
+             </widget>
+            </item>
+            <item row="1" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_RRel">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="suffix">
+               <string> %</string>
+              </property>
+              <property name="decimals">
+               <number>3</number>
+              </property>
+              <property name="maximum">
+               <double>100.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0">
+             <widget class="QRadioButton" name="RBRAbs">
+              <property name="text">
+               <string>Absolute</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_RAbs">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="decimals">
+               <number>8</number>
+              </property>
+              <property name="minimum">
+               <double>-1000000000000.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>1000000000000.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0">
+             <widget class="QRadioButton" name="RBRMuSigma">
+              <property name="text">
+               <string>Mean + n*(std deviation)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_RMuSigma">
+              <property name="enabled">
                <bool>false</bool>
               </property>
+              <property name="decimals">
+               <number>8</number>
+              </property>
+              <property name="minimum">
+               <double>-1000000000000.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>1000000000000.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+              <property name="value">
+               <double>3.000000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QRadioButton" name="RBRNo">
+              <property name="text">
+               <string>No refinement</string>
+              </property>
              </widget>
             </item>
            </layout>
-          </item>
-          <item>
-           <widget class="QCheckBox" name="CBJump">
-            <property name="text">
-             <string>Jump between elements</string>
+          </widget>
+         </item>
+         <item>
+          <widget class="QGroupBox" name="GBCoarseningThresholds">
+           <property name="title">
+            <string>Coarsening threshold</string>
+           </property>
+           <layout class="QGridLayout">
+            <property name="margin">
+             <number>9</number>
             </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </item>
-      <item row="2" column="0">
-       <layout class="QHBoxLayout">
-        <property name="spacing">
-         <number>6</number>
-        </property>
-        <property name="margin">
-         <number>0</number>
-        </property>
-        <item>
-         <widget class="QGroupBox" name="GBRefinementThresholds">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
+            <property name="spacing">
+             <number>6</number>
+            </property>
+            <item row="0" column="0">
+             <widget class="QRadioButton" name="RBCPE">
+              <property name="text">
+               <string>Percentage of meshes</string>
+              </property>
+              <property name="checkable">
+               <bool>true</bool>
+              </property>
+              <property name="checked">
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_CPE">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="suffix">
+               <string> %</string>
+              </property>
+              <property name="decimals">
+               <number>3</number>
+              </property>
+              <property name="maximum">
+               <double>100.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QRadioButton" name="RBCRel">
+              <property name="text">
+               <string>Relative</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_CRel">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="suffix">
+               <string> %</string>
+              </property>
+              <property name="decimals">
+               <number>3</number>
+              </property>
+              <property name="maximum">
+               <double>100.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0">
+             <widget class="QRadioButton" name="RBCAbs">
+              <property name="text">
+               <string>Absolute</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_CAbs">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="decimals">
+               <number>8</number>
+              </property>
+              <property name="minimum">
+               <double>-1000000000000.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>1000000000000.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0">
+             <widget class="QRadioButton" name="RBCMuSigma">
+              <property name="text">
+               <string>Mean - n*(std deviation)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="1">
+             <widget class="QDoubleSpinBox" name="SpinBox_CMuSigma">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="decimals">
+               <number>8</number>
+              </property>
+              <property name="minimum">
+               <double>-1000000000000.000000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>1000000000000.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+              <property name="value">
+               <double>4.000000000000000</double>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0">
+             <widget class="QRadioButton" name="RBCNo">
+              <property name="text">
+               <string>No coarsening</string>
+              </property>
+              <property name="checked">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="6" column="0" colspan="2">
+     <widget class="QGroupBox" name="GBAreaManagement">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="title">
+       <string>Zone management</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_4">
+       <item row="0" column="0">
+        <widget class="QTableWidget" name="TWZone">
+         <property name="minimumSize">
+          <size>
+           <width>400</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="editTriggers">
+          <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
+         </property>
+         <property name="showGrid">
+          <bool>true</bool>
+         </property>
+         <property name="rowCount">
+          <number>0</number>
+         </property>
+         <property name="columnCount">
+          <number>3</number>
+         </property>
+         <column>
+          <property name="text">
+           <string>Refinement</string>
           </property>
-          <property name="title">
-           <string>Refinement threshold</string>
+         </column>
+         <column>
+          <property name="text">
+           <string>Coarsening</string>
           </property>
-          <layout class="QGridLayout">
-           <property name="margin">
-            <number>9</number>
-           </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Zone name</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="0" column="2">
+        <layout class="QVBoxLayout">
+         <property name="spacing">
+          <number>6</number>
+         </property>
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <item>
+          <layout class="QVBoxLayout">
            <property name="spacing">
             <number>6</number>
            </property>
-           <item row="0" column="0">
-            <widget class="QRadioButton" name="RBRPE">
-             <property name="text">
-              <string>Percentage of meshes</string>
-             </property>
-             <property name="checkable">
-              <bool>true</bool>
-             </property>
-             <property name="checked">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_RPE">
-             <property name="suffix">
-              <string> %</string>
-             </property>
-             <property name="decimals">
-              <number>3</number>
-             </property>
-             <property name="maximum">
-              <double>100.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-             <property name="value">
-              <double>2.000000000000000</double>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="QRadioButton" name="RBRRel">
-             <property name="text">
-              <string>Relative</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_RRel">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="suffix">
-              <string> %</string>
-             </property>
-             <property name="decimals">
-              <number>3</number>
-             </property>
-             <property name="maximum">
-              <double>100.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="0">
-            <widget class="QRadioButton" name="RBRAbs">
-             <property name="text">
-              <string>Absolute</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_RAbs">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="decimals">
-              <number>8</number>
-             </property>
-             <property name="minimum">
-              <double>-1000000000000.000000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>1000000000000.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="0">
-            <widget class="QRadioButton" name="RBRNo">
-             <property name="text">
-              <string>No refinement</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </widget>
-        </item>
-        <item>
-         <widget class="QGroupBox" name="GBCoarseningThresholds">
-          <property name="title">
-           <string>Coarsening threshold</string>
-          </property>
-          <layout class="QGridLayout">
            <property name="margin">
-            <number>9</number>
+            <number>0</number>
            </property>
-           <property name="spacing">
-            <number>6</number>
-           </property>
-           <item row="0" column="0">
-            <widget class="QRadioButton" name="RBCPE">
+           <item>
+            <widget class="QPushButton" name="PBZoneNew">
              <property name="text">
-              <string>Percentage of meshes</string>
-             </property>
-             <property name="checkable">
-              <bool>true</bool>
-             </property>
-             <property name="checked">
-              <bool>false</bool>
+              <string>New</string>
              </property>
             </widget>
            </item>
-           <item row="0" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_CPE">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="suffix">
-              <string> %</string>
-             </property>
-             <property name="decimals">
-              <number>3</number>
-             </property>
-             <property name="maximum">
-              <double>100.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="QRadioButton" name="RBCRel">
+           <item>
+            <widget class="QPushButton" name="PBZoneEdit">
              <property name="text">
-              <string>Relative</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_CRel">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="suffix">
-              <string> %</string>
-             </property>
-             <property name="decimals">
-              <number>3</number>
-             </property>
-             <property name="maximum">
-              <double>100.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
+              <string>Edit</string>
              </property>
             </widget>
            </item>
-           <item row="2" column="0">
-            <widget class="QRadioButton" name="RBCAbs">
+           <item>
+            <widget class="QPushButton" name="PBZoneDelete">
              <property name="text">
-              <string>Absolute</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="1">
-            <widget class="QDoubleSpinBox" name="SpinBox_CAbs">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="decimals">
-              <number>8</number>
-             </property>
-             <property name="minimum">
-              <double>-1000000000000.000000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>1000000000000.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="0">
-            <widget class="QRadioButton" name="RBCNo">
-             <property name="text">
-              <string>No coarsening</string>
-             </property>
-             <property name="checked">
-              <bool>true</bool>
+              <string/>
              </property>
             </widget>
            </item>
           </layout>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="5" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBAreaManagement">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title">
-      <string>Zone management</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_4">
-      <item row="0" column="0">
-       <widget class="QTableWidget" name="TWZone">
-        <property name="minimumSize">
-         <size>
-          <width>400</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="editTriggers">
-         <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
-        </property>
-        <property name="showGrid">
-         <bool>true</bool>
-        </property>
-        <property name="rowCount">
-         <number>0</number>
-        </property>
-        <property name="columnCount">
-         <number>3</number>
-        </property>
-        <column>
-         <property name="text">
-          <string>Refinement</string>
-         </property>
-        </column>
-        <column>
-         <property name="text">
-          <string>Coarsening</string>
-         </property>
-        </column>
-        <column>
-         <property name="text">
-          <string>Zone name</string>
-         </property>
-        </column>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="0" column="2">
-       <layout class="QVBoxLayout">
-        <property name="spacing">
-         <number>6</number>
-        </property>
-        <property name="margin">
-         <number>0</number>
-        </property>
-        <item>
-         <layout class="QVBoxLayout">
-          <property name="spacing">
-           <number>6</number>
-          </property>
-          <property name="margin">
-           <number>0</number>
-          </property>
-          <item>
-           <widget class="QPushButton" name="PBZoneNew">
-            <property name="text">
-             <string>New</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QPushButton" name="PBZoneEdit">
-            <property name="text">
-             <string>Edit</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QPushButton" name="PBZoneDelete">
-            <property name="text">
-             <string/>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Vertical</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>20</width>
-            <height>48</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="6" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBField">
-     <property name="title">
-      <string>Field Interpolation</string>
-     </property>
-     <layout class="QGridLayout">
-      <property name="margin">
-       <number>9</number>
-      </property>
-      <property name="spacing">
-       <number>6</number>
+         </item>
+         <item>
+          <spacer>
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>48</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="7" column="0">
+     <widget class="QGroupBox" name="GBField">
+      <property name="title">
+       <string>Field Interpolation</string>
       </property>
-      <item row="0" column="0">
-       <layout class="QGridLayout">
-        <property name="margin">
-         <number>0</number>
-        </property>
-        <property name="spacing">
-         <number>6</number>
-        </property>
-        <item row="0" column="0">
-         <widget class="QRadioButton" name="RBFieldNo">
-          <property name="text">
-           <string>None</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QRadioButton" name="RBFieldAll">
-          <property name="text">
-           <string>All</string>
-          </property>
-          <property name="checked">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2">
-         <widget class="QRadioButton" name="RBFieldChosen">
-          <property name="text">
-           <string>Chosen</string>
-          </property>
-          <property name="checked">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="1" column="0">
-       <widget class="QTableWidget" name="TWField">
-        <column>
-         <property name="text">
-          <string>Selection</string>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <layout class="QGridLayout">
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <property name="spacing">
+          <number>6</number>
          </property>
-        </column>
-        <column>
-         <property name="text">
-          <string>Field Name</string>
-         </property>
-        </column>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="7" column="0" colspan="2">
-    <widget class="QCheckBox" name="CBGroupe">
-     <property name="text">
-      <string>Filtering with groups</string>
-     </property>
-    </widget>
-   </item>
-   <item row="8" column="0" colspan="2">
-    <widget class="QCheckBox" name="CBAdvanced">
-     <property name="text">
-      <string>Advanced options</string>
-     </property>
-    </widget>
-   </item>
-   <item row="9" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBAdvancedOptions">
-     <property name="title">
-      <string>Advanced options</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_1">
-      <item row="0" column="0">
-       <widget class="QLabel" name="TLMinimalDiameter">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>Minimal diameter</string>
-        </property>
-        <property name="wordWrap">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QDoubleSpinBox" name="doubleSpinBoxDiamMin">
-        <property name="decimals">
-         <number>5</number>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QLabel" name="TLMaximalLevel">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>Maximal level</string>
-        </property>
-        <property name="wordWrap">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QSpinBox" name="spinBoxNivMax">
-        <property name="value">
-         <number>99</number>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0" colspan="2">
-       <widget class="QGroupBox" name="GBAdapInit">
-        <property name="title">
-         <string>Initialization of adaptation</string>
-        </property>
-        <layout class="QGridLayout" name="gridLayout_2">
          <item row="0" column="0">
-          <widget class="QRadioButton" name="RBAIN">
+          <widget class="QRadioButton" name="RBFieldNo">
            <property name="text">
-            <string>Nothing</string>
+            <string>None</string>
            </property>
            <property name="checked">
             <bool>true</bool>
           </widget>
          </item>
          <item row="0" column="1">
-          <widget class="QRadioButton" name="RBAIR">
+          <widget class="QRadioButton" name="RBFieldAll">
            <property name="text">
-            <string>Refinement</string>
+            <string>All</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
            </property>
           </widget>
          </item>
          <item row="0" column="2">
-          <widget class="QRadioButton" name="RBAID">
+          <widget class="QRadioButton" name="RBFieldChosen">
            <property name="text">
-            <string>Coarsening</string>
+            <string>Chosen</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
            </property>
           </widget>
          </item>
         </layout>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="10" column="0" colspan="2">
-    <widget class="QGroupBox" name="GBButtons">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QGridLayout">
-      <property name="margin">
-       <number>9</number>
+       </item>
+       <item row="1" column="0">
+        <widget class="QTableWidget" name="TWField">
+         <column>
+          <property name="text">
+           <string>Selection</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Field Name</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="7" column="2">
+     <spacer name="horizontalSpacer_5">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
       </property>
-      <property name="spacing">
-       <number>6</number>
+     </spacer>
+    </item>
+    <item row="8" column="0">
+     <widget class="QCheckBox" name="CBAdvanced">
+      <property name="text">
+       <string>Advanced options</string>
       </property>
-      <item row="0" column="0">
-       <widget class="QPushButton" name="buttonOk">
-        <property name="text">
-         <string>OK</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QPushButton" name="buttonApply">
-        <property name="text">
-         <string>Apply</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2">
-       <widget class="QPushButton" name="buttonCancel">
-        <property name="text">
-         <string>Cancel</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="3">
-       <widget class="QPushButton" name="buttonHelp">
-        <property name="text">
-         <string>Help</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="0" column="0">
-    <widget class="QLabel" name="Name">
-     <property name="text">
-      <string>Name</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
-  <zorder>LEHypothesisName</zorder>
-  <zorder>GBTypeAdaptation</zorder>
-  <zorder>GBUniform</zorder>
-  <zorder>GBFieldFile</zorder>
-  <zorder>GBFieldManagement</zorder>
-  <zorder>GBAreaManagement</zorder>
-  <zorder>GBField</zorder>
-  <zorder>CBGroupe</zorder>
-  <zorder>CBAdvanced</zorder>
-  <zorder>GBAdvancedOptions</zorder>
-  <zorder>GBButtons</zorder>
-  <zorder></zorder>
-  <zorder>Name</zorder>
+     </widget>
+    </item>
+    <item row="8" column="2">
+     <spacer name="horizontalSpacer_4">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="9" column="0" rowspan="2">
+     <widget class="QGroupBox" name="GBAdvancedOptions">
+      <property name="title">
+       <string>Advanced options</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <item row="0" column="0">
+        <widget class="QLabel" name="TLMinimalDiameter">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Minimal diameter</string>
+         </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QDoubleSpinBox" name="doubleSpinBoxDiamMin">
+         <property name="decimals">
+          <number>7</number>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="TLMaximalLevel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Maximal level</string>
+         </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QSpinBox" name="SpinBoxNivMax">
+         <property name="value">
+          <number>99</number>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2">
+        <widget class="QGroupBox" name="GBAdapInit">
+         <property name="title">
+          <string>Initialization of adaptation</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0">
+           <widget class="QRadioButton" name="RBAIN">
+            <property name="text">
+             <string>Nothing</string>
+            </property>
+            <property name="checked">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QRadioButton" name="RBAIR">
+            <property name="text">
+             <string>Refinement</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="2">
+           <widget class="QRadioButton" name="RBAID">
+            <property name="text">
+             <string>Coarsening</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QCheckBox" name="CBOutputLevel">
+         <property name="text">
+          <string>Output of the level of refinement</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
+        <widget class="QCheckBox" name="CBOutputQuality">
+         <property name="text">
+          <string>Output of the qualities</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QCheckBox" name="CBOutputDiameter">
+         <property name="text">
+          <string>Output of the diameters</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QCheckBox" name="CBOutputParent">
+         <property name="text">
+          <string>Output of the parents</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QCheckBox" name="CBOutputVoisins">
+         <property name="text">
+          <string>Output of the neighbours</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="9" column="2">
+     <spacer name="horizontalSpacer_3">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="10" column="1">
+     <spacer name="horizontalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="11" column="0">
+     <widget class="QGroupBox" name="GBButtons">
+      <property name="title">
+       <string/>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <widget class="QPushButton" name="buttonOk">
+         <property name="text">
+          <string>OK</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QPushButton" name="buttonApply">
+         <property name="text">
+          <string>Apply</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2">
+        <widget class="QPushButton" name="buttonCancel">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="3">
+        <widget class="QPushButton" name="buttonHelp">
+         <property name="text">
+          <string>Help</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+   </layout>
+  </widget>
  </widget>
  <resources/>
  <connections/>
diff --git a/src/HOMARDGUI/CreateIteration.h b/src/HOMARDGUI/CreateIteration.h
deleted file mode 100644 (file)
index c3e48c9..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-/********************************************************************************
-** Form generated from reading UI file 'CreateIteration.ui'
-**
-** Created: Wed Apr 11 11:35:39 2012
-**      by: Qt User Interface Compiler version 4.6.3
-**
-** WARNING! All changes made in this file will be lost when recompiling UI file!
-********************************************************************************/
-
-#ifndef CREATEITERATION_H
-#define CREATEITERATION_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QComboBox>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QtGui/QSpacerItem>
-#include <QtGui/QSpinBox>
-#include <QtGui/QWidget>
-
-QT_BEGIN_NAMESPACE
-
-class Ui_CreateIteration
-{
-public:
-    QGridLayout *gridLayout;
-    QGroupBox *GBField;
-    QGridLayout *gridLayout1;
-    QLineEdit *LEFieldFile;
-    QSpacerItem *spacerItem;
-    QRadioButton *RBChosen;
-    QSpacerItem *spacerItem1;
-    QSpinBox *SpinBox_Rank;
-    QLabel *Rank;
-    QSpacerItem *spacerItem2;
-    QSpinBox *SpinBox_TimeStep;
-    QLabel *TimeStep;
-    QSpacerItem *spacerItem3;
-    QRadioButton *RBLast;
-    QRadioButton *RBNo;
-    QPushButton *PushFieldFile;
-    QLabel *FieldFile;
-    QLabel *Iteration_Name;
-    QLineEdit *LEIterationName;
-    QLabel *Iter_Parent;
-    QSpacerItem *spacerItem4;
-    QPushButton *PBIterParent;
-    QLineEdit *LEIterationParentName;
-    QLabel *Mesh_n;
-    QSpacerItem *spacerItem5;
-    QLineEdit *LEMeshName_n;
-    QSpacerItem *spacerItem6;
-    QLabel *Mesh_np1;
-    QLineEdit *LEMeshName_np1;
-    QSpacerItem *spacerItem7;
-    QSpacerItem *spacerItem8;
-    QGroupBox *Hypothese;
-    QGridLayout *gridLayout2;
-    QComboBox *CBHypothese;
-    QSpacerItem *spacerItem9;
-    QPushButton *PBHypoEdit;
-    QPushButton *PBHypoNew;
-    QSpacerItem *spacerItem10;
-    QGroupBox *GroupButtons;
-    QGridLayout *gridLayout3;
-    QPushButton *buttonOk;
-    QPushButton *buttonApply;
-    QPushButton *buttonCancel;
-    QPushButton *buttonHelp;
-
-    void setupUi(QWidget *CreateIteration)
-    {
-        if (CreateIteration->objectName().isEmpty())
-            CreateIteration->setObjectName(QString::fromUtf8("CreateIteration"));
-        CreateIteration->resize(610, 598);
-        gridLayout = new QGridLayout(CreateIteration);
-#ifndef Q_OS_MAC
-        gridLayout->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-        GBField = new QGroupBox(CreateIteration);
-        GBField->setObjectName(QString::fromUtf8("GBField"));
-        gridLayout1 = new QGridLayout(GBField);
-#ifndef Q_OS_MAC
-        gridLayout1->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout1->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-        LEFieldFile = new QLineEdit(GBField);
-        LEFieldFile->setObjectName(QString::fromUtf8("LEFieldFile"));
-        LEFieldFile->setMinimumSize(QSize(282, 21));
-
-        gridLayout1->addWidget(LEFieldFile, 0, 2, 1, 5);
-
-        spacerItem = new QSpacerItem(138, 18, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout1->addItem(spacerItem, 1, 3, 1, 4);
-
-        RBChosen = new QRadioButton(GBField);
-        RBChosen->setObjectName(QString::fromUtf8("RBChosen"));
-
-        gridLayout1->addWidget(RBChosen, 2, 6, 1, 1);
-
-        spacerItem1 = new QSpacerItem(255, 13, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-        gridLayout1->addItem(spacerItem1, 4, 6, 1, 1);
-
-        SpinBox_Rank = new QSpinBox(GBField);
-        SpinBox_Rank->setObjectName(QString::fromUtf8("SpinBox_Rank"));
-        SpinBox_Rank->setMaximum(1010000);
-        SpinBox_Rank->setMinimum(-1);
-        SpinBox_Rank->setValue(1);
-
-        gridLayout1->addWidget(SpinBox_Rank, 4, 5, 1, 1);
-
-        Rank = new QLabel(GBField);
-        Rank->setObjectName(QString::fromUtf8("Rank"));
-
-        gridLayout1->addWidget(Rank, 4, 4, 1, 1);
-
-        spacerItem2 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
-
-        gridLayout1->addItem(spacerItem2, 4, 2, 1, 2);
-
-        SpinBox_TimeStep = new QSpinBox(GBField);
-        SpinBox_TimeStep->setObjectName(QString::fromUtf8("SpinBox_TimeStep"));
-        SpinBox_TimeStep->setMaximum(100000);
-        SpinBox_TimeStep->setMinimum(-2);
-        SpinBox_TimeStep->setValue(-1);
-
-        gridLayout1->addWidget(SpinBox_TimeStep, 4, 1, 1, 1);
-
-        TimeStep = new QLabel(GBField);
-        TimeStep->setObjectName(QString::fromUtf8("TimeStep"));
-
-        gridLayout1->addWidget(TimeStep, 4, 0, 1, 1);
-
-        spacerItem3 = new QSpacerItem(138, 28, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout1->addItem(spacerItem3, 3, 0, 1, 4);
-
-        RBLast = new QRadioButton(GBField);
-        RBLast->setObjectName(QString::fromUtf8("RBLast"));
-
-        gridLayout1->addWidget(RBLast, 2, 3, 1, 3);
-
-        RBNo = new QRadioButton(GBField);
-        RBNo->setObjectName(QString::fromUtf8("RBNo"));
-        RBNo->setCheckable(true);
-        RBNo->setChecked(true);
-
-        gridLayout1->addWidget(RBNo, 2, 0, 1, 3);
-
-        PushFieldFile = new QPushButton(GBField);
-        PushFieldFile->setObjectName(QString::fromUtf8("PushFieldFile"));
-
-        gridLayout1->addWidget(PushFieldFile, 0, 1, 1, 1);
-
-        FieldFile = new QLabel(GBField);
-        FieldFile->setObjectName(QString::fromUtf8("FieldFile"));
-
-        gridLayout1->addWidget(FieldFile, 0, 0, 1, 1);
-
-
-        gridLayout->addWidget(GBField, 6, 0, 1, 4);
-
-        Iteration_Name = new QLabel(CreateIteration);
-        Iteration_Name->setObjectName(QString::fromUtf8("Iteration_Name"));
-
-        gridLayout->addWidget(Iteration_Name, 0, 0, 1, 2);
-
-        LEIterationName = new QLineEdit(CreateIteration);
-        LEIterationName->setObjectName(QString::fromUtf8("LEIterationName"));
-        LEIterationName->setMinimumSize(QSize(290, 21));
-        LEIterationName->setMaxLength(200);
-
-        gridLayout->addWidget(LEIterationName, 0, 2, 1, 2);
-
-        Iter_Parent = new QLabel(CreateIteration);
-        Iter_Parent->setObjectName(QString::fromUtf8("Iter_Parent"));
-
-        gridLayout->addWidget(Iter_Parent, 1, 0, 1, 1);
-
-        spacerItem4 = new QSpacerItem(20, 24, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem4, 1, 1, 1, 1);
-
-        PBIterParent = new QPushButton(CreateIteration);
-        PBIterParent->setObjectName(QString::fromUtf8("PBIterParent"));
-        PBIterParent->setEnabled(true);
-        PBIterParent->setMaximumSize(QSize(50, 27));
-
-        gridLayout->addWidget(PBIterParent, 1, 2, 1, 1);
-
-        LEIterationParentName = new QLineEdit(CreateIteration);
-        LEIterationParentName->setObjectName(QString::fromUtf8("LEIterationParentName"));
-        LEIterationParentName->setMinimumSize(QSize(0, 21));
-        LEIterationParentName->setMaxLength(200);
-        LEIterationParentName->setReadOnly(true);
-
-        gridLayout->addWidget(LEIterationParentName, 1, 3, 1, 1);
-
-        Mesh_n = new QLabel(CreateIteration);
-        Mesh_n->setObjectName(QString::fromUtf8("Mesh_n"));
-
-        gridLayout->addWidget(Mesh_n, 2, 0, 1, 1);
-
-        spacerItem5 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem5, 2, 1, 1, 1);
-
-        LEMeshName_n = new QLineEdit(CreateIteration);
-        LEMeshName_n->setObjectName(QString::fromUtf8("LEMeshName_n"));
-        LEMeshName_n->setMinimumSize(QSize(290, 21));
-        LEMeshName_n->setMaxLength(32);
-        LEMeshName_n->setReadOnly(true);
-
-        gridLayout->addWidget(LEMeshName_n, 2, 2, 1, 2);
-
-        spacerItem6 = new QSpacerItem(20, 22, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem6, 3, 1, 1, 1);
-
-        Mesh_np1 = new QLabel(CreateIteration);
-        Mesh_np1->setObjectName(QString::fromUtf8("Mesh_np1"));
-
-        gridLayout->addWidget(Mesh_np1, 4, 0, 1, 2);
-
-        LEMeshName_np1 = new QLineEdit(CreateIteration);
-        LEMeshName_np1->setObjectName(QString::fromUtf8("LEMeshName_np1"));
-        LEMeshName_np1->setMinimumSize(QSize(290, 21));
-        LEMeshName_np1->setMaxLength(32);
-
-        gridLayout->addWidget(LEMeshName_np1, 4, 2, 1, 2);
-
-        spacerItem7 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem7, 5, 1, 1, 1);
-
-        spacerItem8 = new QSpacerItem(20, 22, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem8, 7, 1, 1, 1);
-
-        Hypothese = new QGroupBox(CreateIteration);
-        Hypothese->setObjectName(QString::fromUtf8("Hypothese"));
-        gridLayout2 = new QGridLayout(Hypothese);
-#ifndef Q_OS_MAC
-        gridLayout2->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout2->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-        CBHypothese = new QComboBox(Hypothese);
-        CBHypothese->setObjectName(QString::fromUtf8("CBHypothese"));
-        CBHypothese->setSizeAdjustPolicy(QComboBox::AdjustToContents);
-
-        gridLayout2->addWidget(CBHypothese, 0, 0, 1, 1);
-
-        spacerItem9 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
-
-        gridLayout2->addItem(spacerItem9, 0, 1, 1, 1);
-
-        PBHypoEdit = new QPushButton(Hypothese);
-        PBHypoEdit->setObjectName(QString::fromUtf8("PBHypoEdit"));
-
-        gridLayout2->addWidget(PBHypoEdit, 0, 2, 1, 1);
-
-        PBHypoNew = new QPushButton(Hypothese);
-        PBHypoNew->setObjectName(QString::fromUtf8("PBHypoNew"));
-
-        gridLayout2->addWidget(PBHypoNew, 0, 3, 1, 1);
-
-
-        gridLayout->addWidget(Hypothese, 8, 0, 1, 4);
-
-        spacerItem10 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-        gridLayout->addItem(spacerItem10, 9, 0, 1, 1);
-
-        GroupButtons = new QGroupBox(CreateIteration);
-        GroupButtons->setObjectName(QString::fromUtf8("GroupButtons"));
-        gridLayout3 = new QGridLayout(GroupButtons);
-#ifndef Q_OS_MAC
-        gridLayout3->setSpacing(6);
-#endif
-#ifndef Q_OS_MAC
-        gridLayout3->setContentsMargins(9, 9, 9, 9);
-#endif
-        gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
-        buttonOk = new QPushButton(GroupButtons);
-        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-        buttonOk->setAutoDefault(false);
-        buttonOk->setDefault(false);
-
-        gridLayout3->addWidget(buttonOk, 0, 0, 1, 1);
-
-        buttonApply = new QPushButton(GroupButtons);
-        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-        gridLayout3->addWidget(buttonApply, 0, 1, 1, 1);
-
-        buttonCancel = new QPushButton(GroupButtons);
-        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-        gridLayout3->addWidget(buttonCancel, 0, 2, 1, 1);
-
-        buttonHelp = new QPushButton(GroupButtons);
-        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-        gridLayout3->addWidget(buttonHelp, 0, 3, 1, 1);
-
-
-        gridLayout->addWidget(GroupButtons, 10, 0, 1, 4);
-
-
-        retranslateUi(CreateIteration);
-
-        CBHypothese->setCurrentIndex(-1);
-
-
-        QMetaObject::connectSlotsByName(CreateIteration);
-    } // setupUi
-
-    void retranslateUi(QWidget *CreateIteration)
-    {
-        CreateIteration->setWindowTitle(QApplication::translate("CreateIteration", "Create an iteration", 0, QApplication::UnicodeUTF8));
-        GBField->setTitle(QApplication::translate("CreateIteration", "Field information", 0, QApplication::UnicodeUTF8));
-        RBChosen->setText(QApplication::translate("CreateIteration", "Chosen time step", 0, QApplication::UnicodeUTF8));
-        Rank->setText(QApplication::translate("CreateIteration", "Rank", 0, QApplication::UnicodeUTF8));
-        TimeStep->setText(QApplication::translate("CreateIteration", "Time step", 0, QApplication::UnicodeUTF8));
-        RBLast->setText(QApplication::translate("CreateIteration", "Last time step", 0, QApplication::UnicodeUTF8));
-        RBNo->setText(QApplication::translate("CreateIteration", "No time step", 0, QApplication::UnicodeUTF8));
-        PushFieldFile->setText(QString());
-        FieldFile->setText(QApplication::translate("CreateIteration", "Field file", 0, QApplication::UnicodeUTF8));
-        Iteration_Name->setText(QApplication::translate("CreateIteration", "Iteration Name", 0, QApplication::UnicodeUTF8));
-        Iter_Parent->setText(QApplication::translate("CreateIteration", "Previous iteration", 0, QApplication::UnicodeUTF8));
-        PBIterParent->setText(QString());
-        Mesh_n->setText(QApplication::translate("CreateIteration", "Mesh n", 0, QApplication::UnicodeUTF8));
-        Mesh_np1->setText(QApplication::translate("CreateIteration", "Mesh n+1", 0, QApplication::UnicodeUTF8));
-        Hypothese->setTitle(QApplication::translate("CreateIteration", "Hypothesis", 0, QApplication::UnicodeUTF8));
-        PBHypoEdit->setText(QApplication::translate("CreateIteration", "Edit", 0, QApplication::UnicodeUTF8));
-        PBHypoNew->setText(QApplication::translate("CreateIteration", "New", 0, QApplication::UnicodeUTF8));
-        GroupButtons->setTitle(QString());
-        buttonOk->setText(QApplication::translate("CreateIteration", "OK", 0, QApplication::UnicodeUTF8));
-        buttonApply->setText(QApplication::translate("CreateIteration", "Apply", 0, QApplication::UnicodeUTF8));
-        buttonCancel->setText(QApplication::translate("CreateIteration", "Cancel", 0, QApplication::UnicodeUTF8));
-        buttonHelp->setText(QApplication::translate("CreateIteration", "Help", 0, QApplication::UnicodeUTF8));
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateIteration: public Ui_CreateIteration {};
-} // namespace Ui
-
-QT_END_NAMESPACE
-
-#endif // CREATEITERATION_H
index 01a0d38b488314792e2eda698dbef10c34f79182..2cc2827c6c5fefd0574df3c52a5512d39f15afab 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>CreateIteration</class>
- <widget class="QWidget" name="CreateIteration" >
-  <property name="geometry" >
+ <widget class="QScrollArea" name="CreateIteration">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>610</width>
-    <height>598</height>
+    <width>777</width>
+    <height>668</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>750</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="sizeIncrement">
+   <size>
+    <width>1</width>
+    <height>1</height>
+   </size>
+  </property>
+  <property name="baseSize">
+   <size>
+    <width>750</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="windowTitle">
    <string>Create an iteration</string>
   </property>
-  <layout class="QGridLayout" >
-   <property name="margin" >
-    <number>9</number>
+  <property name="widgetResizable">
+   <bool>true</bool>
+  </property>
+  <widget class="QWidget" name="scrollAreaWidgetContents">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>773</width>
+     <height>664</height>
+    </rect>
    </property>
-   <property name="spacing" >
-    <number>6</number>
+   <property name="sizeGripEnabled" stdset="0">
+    <bool>true</bool>
    </property>
-   <item row="6" column="0" colspan="4" >
-    <widget class="QGroupBox" name="GBField" >
-     <property name="title" >
-      <string>Field information</string>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="2" colspan="5" >
-       <widget class="QLineEdit" name="LEFieldFile" >
-        <property name="minimumSize" >
-         <size>
-          <width>282</width>
-          <height>21</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="3" colspan="4" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Vertical</enum>
-        </property>
-        <property name="sizeHint" >
-         <size>
-          <width>138</width>
-          <height>18</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="2" column="6" >
-       <widget class="QRadioButton" name="RBChosen" >
-        <property name="text" >
-         <string>Chosen time step</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="6" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType" >
-         <enum>QSizePolicy::Expanding</enum>
-        </property>
-        <property name="sizeHint" >
-         <size>
-          <width>255</width>
-          <height>13</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="4" column="5" >
-       <widget class="QSpinBox" name="SpinBox_Rank" >
-        <property name="maximum" >
-         <number>1010000</number>
-        </property>
-        <property name="minimum" >
-         <number>-1</number>
-        </property>
-        <property name="value" >
-         <number>1</number>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="4" >
-       <widget class="QLabel" name="Rank" >
-        <property name="text" >
-         <string>Rank</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="2" colspan="2" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType" >
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" >
-         <size>
-          <width>40</width>
-          <height>13</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="4" column="1" >
-       <widget class="QSpinBox" name="SpinBox_TimeStep" >
-        <property name="maximum" >
-         <number>100000</number>
-        </property>
-        <property name="minimum" >
-         <number>-2</number>
-        </property>
-        <property name="value" >
-         <number>-1</number>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0" >
-       <widget class="QLabel" name="TimeStep" >
-        <property name="text" >
-         <string>Time step</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0" colspan="4" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Vertical</enum>
-        </property>
-        <property name="sizeHint" >
-         <size>
-          <width>138</width>
-          <height>28</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="2" column="3" colspan="3" >
-       <widget class="QRadioButton" name="RBLast" >
-        <property name="text" >
-         <string>Last time step</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0" colspan="3" >
-       <widget class="QRadioButton" name="RBNo" >
-        <property name="text" >
-         <string>No time step</string>
-        </property>
-        <property name="checkable" >
-         <bool>true</bool>
-        </property>
-        <property name="checked" >
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="PushFieldFile" >
-        <property name="text" >
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="FieldFile" >
-        <property name="text" >
-         <string>Field file</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="0" column="0" colspan="2" >
-    <widget class="QLabel" name="Iteration_Name" >
-     <property name="text" >
-      <string>Iteration Name</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="2" colspan="2" >
-    <widget class="QLineEdit" name="LEIterationName" >
-     <property name="minimumSize" >
-      <size>
-       <width>290</width>
-       <height>21</height>
-      </size>
-     </property>
-     <property name="maxLength" >
-      <number>200</number>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0" >
-    <widget class="QLabel" name="Iter_Parent" >
-     <property name="text" >
-      <string>Previous iteration</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="1" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>24</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="1" column="2" >
-    <widget class="QPushButton" name="PBIterParent" >
-     <property name="enabled" >
-      <bool>true</bool>
-     </property>
-     <property name="maximumSize" >
-      <size>
-       <width>50</width>
-       <height>27</height>
-      </size>
-     </property>
-     <property name="text" >
-      <string/>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="3" >
-    <widget class="QLineEdit" name="LEIterationParentName" >
-     <property name="minimumSize" >
-      <size>
-       <width>0</width>
-       <height>21</height>
-      </size>
-     </property>
-     <property name="maxLength" >
-      <number>200</number>
-     </property>
-     <property name="readOnly" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" >
-    <widget class="QLabel" name="Mesh_n" >
-     <property name="text" >
-      <string>Mesh n</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="1" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>21</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="2" column="2" colspan="2" >
-    <widget class="QLineEdit" name="LEMeshName_n" >
-     <property name="minimumSize" >
-      <size>
-       <width>290</width>
-       <height>21</height>
-      </size>
-     </property>
-     <property name="maxLength" >
-      <number>32</number>
-     </property>
-     <property name="readOnly" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="1" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>22</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="4" column="0" colspan="2" >
-    <widget class="QLabel" name="Mesh_np1" >
-     <property name="text" >
-      <string>Mesh n+1</string>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="2" colspan="2" >
-    <widget class="QLineEdit" name="LEMeshName_np1" >
-     <property name="minimumSize" >
-      <size>
-       <width>290</width>
-       <height>21</height>
-      </size>
-     </property>
-     <property name="maxLength" >
-      <number>32</number>
-     </property>
-    </widget>
-   </item>
-   <item row="5" column="1" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>21</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="7" column="1" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>22</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="8" column="0" colspan="4" >
-    <widget class="QGroupBox" name="Hypothese" >
-     <property name="title" >
-      <string>Hypothesis</string>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="0" >
-       <widget class="QComboBox" name="CBHypothese" >
-        <property name="currentIndex" >
-         <number>-1</number>
-        </property>
-        <property name="sizeAdjustPolicy" >
-         <enum>QComboBox::AdjustToContents</enum>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <spacer>
-        <property name="orientation" >
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType" >
-         <enum>QSizePolicy::Fixed</enum>
-        </property>
-        <property name="sizeHint" >
-         <size>
-          <width>40</width>
-          <height>13</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="PBHypoEdit" >
-        <property name="text" >
-         <string>Edit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="PBHypoNew" >
-        <property name="text" >
-         <string>New</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="9" column="0" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>20</width>
-       <height>21</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="10" column="0" colspan="4" >
-    <widget class="QGroupBox" name="GroupButtons" >
-     <property name="title" >
-      <string/>
-     </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonOk" >
-        <property name="text" >
-         <string>OK</string>
-        </property>
-        <property name="autoDefault" >
-         <bool>false</bool>
-        </property>
-        <property name="default" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonApply" >
-        <property name="text" >
-         <string>Apply</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonCancel" >
-        <property name="text" >
-         <string>Cancel</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
-         <string>Help</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="0" colspan="2">
+     <widget class="QLabel" name="Iteration_Name">
+      <property name="text">
+       <string>Iteration Name</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="2">
+     <spacer name="horizontalSpacer_6">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>117</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="0" column="3" colspan="2">
+     <widget class="QLineEdit" name="LEName">
+      <property name="minimumSize">
+       <size>
+        <width>290</width>
+        <height>21</height>
+       </size>
+      </property>
+      <property name="maxLength">
+       <number>64</number>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="5">
+     <spacer name="horizontalSpacer_3">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="0" colspan="2">
+     <widget class="QLabel" name="Iter_Parent">
+      <property name="text">
+       <string>Previous iteration</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <widget class="QPushButton" name="PBIterParent">
+      <property name="enabled">
+       <bool>true</bool>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>50</width>
+        <height>27</height>
+       </size>
+      </property>
+      <property name="text">
+       <string/>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="3" colspan="2">
+     <widget class="QLineEdit" name="LEIterationParentName">
+      <property name="minimumSize">
+       <size>
+        <width>0</width>
+        <height>21</height>
+       </size>
+      </property>
+      <property name="maxLength">
+       <number>64</number>
+      </property>
+      <property name="readOnly">
+       <bool>true</bool>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="0">
+     <widget class="QLabel" name="Mesh_n">
+      <property name="text">
+       <string>Mesh n</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="2">
+     <spacer name="horizontalSpacer_7">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>117</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="2" column="3" colspan="3">
+     <widget class="QLineEdit" name="LEMeshName_n">
+      <property name="minimumSize">
+       <size>
+        <width>290</width>
+        <height>21</height>
+       </size>
+      </property>
+      <property name="maxLength">
+       <number>64</number>
+      </property>
+      <property name="readOnly">
+       <bool>true</bool>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="6">
+     <spacer name="horizontalSpacer_4">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="3" column="0" colspan="2">
+     <widget class="QLabel" name="Mesh_np1">
+      <property name="text">
+       <string>Mesh n+1</string>
+      </property>
+     </widget>
+    </item>
+    <item row="3" column="2">
+     <spacer name="horizontalSpacer_8">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>117</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="3" column="3" colspan="3">
+     <widget class="QLineEdit" name="LEMeshName_np1">
+      <property name="minimumSize">
+       <size>
+        <width>290</width>
+        <height>21</height>
+       </size>
+      </property>
+      <property name="maxLength">
+       <number>64</number>
+      </property>
+     </widget>
+    </item>
+    <item row="3" column="6">
+     <spacer name="horizontalSpacer_5">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="4" column="0">
+     <spacer name="verticalSpacer">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>62</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="5" column="0" colspan="6">
+     <widget class="QGroupBox" name="GBField">
+      <property name="title">
+       <string>Field information</string>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="2" colspan="5">
+        <widget class="QLineEdit" name="LEFieldFile">
+         <property name="minimumSize">
+          <size>
+           <width>282</width>
+           <height>21</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="3" colspan="4">
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>138</width>
+           <height>18</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="2" column="6">
+        <widget class="QRadioButton" name="RBChosen">
+         <property name="text">
+          <string>Chosen time step</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="6">
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>255</width>
+           <height>13</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="4" column="5">
+        <widget class="QSpinBox" name="SpinBox_Rank">
+         <property name="minimum">
+          <number>-1</number>
+         </property>
+         <property name="maximum">
+          <number>1010000</number>
+         </property>
+         <property name="value">
+          <number>-1</number>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="4">
+        <widget class="QLabel" name="Rank">
+         <property name="text">
+          <string>Rank</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="2" colspan="2">
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>13</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="4" column="1">
+        <widget class="QSpinBox" name="SpinBox_TimeStep">
+         <property name="minimum">
+          <number>-2</number>
+         </property>
+         <property name="maximum">
+          <number>100000</number>
+         </property>
+         <property name="value">
+          <number>-1</number>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
+        <widget class="QLabel" name="TimeStep">
+         <property name="text">
+          <string>Time step</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" colspan="4">
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>138</width>
+           <height>28</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="2" column="3" colspan="3">
+        <widget class="QRadioButton" name="RBLast">
+         <property name="text">
+          <string>Last time step</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="3">
+        <widget class="QRadioButton" name="RBNo">
+         <property name="text">
+          <string>No time step</string>
+         </property>
+         <property name="checkable">
+          <bool>true</bool>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QPushButton" name="PushFieldFile">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QLabel" name="FieldFile">
+         <property name="text">
+          <string>Field file</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="5" column="6">
+     <spacer name="horizontalSpacer_10">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>69</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="6" column="0">
+     <spacer>
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>22</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="7" column="0" colspan="4">
+     <widget class="QGroupBox" name="Hypothese">
+      <property name="title">
+       <string>Hypothesis</string>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <widget class="QComboBox" name="CBHypothese">
+         <property name="currentIndex">
+          <number>-1</number>
+         </property>
+         <property name="sizeAdjustPolicy">
+          <enum>QComboBox::AdjustToContents</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>13</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="0" column="2">
+        <widget class="QPushButton" name="PBHypoEdit">
+         <property name="text">
+          <string>Edit</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="3">
+        <widget class="QPushButton" name="PBHypoNew">
+         <property name="text">
+          <string>New</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="7" column="4" colspan="2">
+     <spacer name="horizontalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="8" column="1">
+     <spacer>
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>21</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="9" column="0" colspan="4">
+     <widget class="QGroupBox" name="GroupButtons">
+      <property name="title">
+       <string/>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="0">
+        <widget class="QPushButton" name="buttonOk">
+         <property name="text">
+          <string>OK</string>
+         </property>
+         <property name="autoDefault">
+          <bool>false</bool>
+         </property>
+         <property name="default">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QPushButton" name="buttonApply">
+         <property name="text">
+          <string>Apply</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2">
+        <widget class="QPushButton" name="buttonCancel">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="3">
+        <widget class="QPushButton" name="buttonHelp">
+         <property name="text">
+          <string>Help</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="9" column="4" colspan="2">
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>40</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="5">
+     <spacer name="horizontalSpacer_9">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>139</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+   </layout>
+  </widget>
  </widget>
  <resources/>
  <connections/>
diff --git a/src/HOMARDGUI/CreateListGroup.h b/src/HOMARDGUI/CreateListGroup.h
deleted file mode 100644 (file)
index f57ebc2..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/********************************************************************************
-** Form generated from reading ui file 'CreateListGroup.ui'
-**
-** Created: Thu Sep 1 16:35:32 2011
-**      by: Qt User Interface Compiler version 4.2.1
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
-#ifndef CREATELISTGROUP_H
-#define CREATELISTGROUP_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QDialog>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QTableWidget>
-
-class Ui_CreateListGroup
-{
-public:
-    QGridLayout *gridLayout;
-    QGroupBox *GBButtons;
-    QGridLayout *gridLayout1;
-    QPushButton *buttonHelp;
-    QPushButton *buttonCancel;
-    QPushButton *buttonApply;
-    QPushButton *buttonOk;
-    QGroupBox *GBOptions;
-    QGridLayout *gridLayout2;
-    QTableWidget *TWGroupe;
-
-    void setupUi(QDialog *CreateListGroup)
-    {
-    CreateListGroup->setObjectName(QString::fromUtf8("CreateListGroup"));
-    QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy.setHorizontalStretch(0);
-    sizePolicy.setVerticalStretch(0);
-    sizePolicy.setHeightForWidth(CreateListGroup->sizePolicy().hasHeightForWidth());
-    CreateListGroup->setSizePolicy(sizePolicy);
-    CreateListGroup->setAutoFillBackground(true);
-    CreateListGroup->setSizeGripEnabled(true);
-    gridLayout = new QGridLayout(CreateListGroup);
-    gridLayout->setSpacing(6);
-    gridLayout->setMargin(9);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    GBButtons = new QGroupBox(CreateListGroup);
-    GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
-    gridLayout1 = new QGridLayout(GBButtons);
-    gridLayout1->setSpacing(6);
-    gridLayout1->setMargin(9);
-    gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-    buttonHelp = new QPushButton(GBButtons);
-    buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-    gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
-
-    buttonCancel = new QPushButton(GBButtons);
-    buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-    gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
-
-    buttonApply = new QPushButton(GBButtons);
-    buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-    gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
-
-    buttonOk = new QPushButton(GBButtons);
-    buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-
-    gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GBButtons, 1, 0, 1, 1);
-
-    GBOptions = new QGroupBox(CreateListGroup);
-    GBOptions->setObjectName(QString::fromUtf8("GBOptions"));
-    gridLayout2 = new QGridLayout(GBOptions);
-    gridLayout2->setSpacing(6);
-    gridLayout2->setMargin(9);
-    gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-    TWGroupe = new QTableWidget(GBOptions);
-    TWGroupe->setObjectName(QString::fromUtf8("TWGroupe"));
-    TWGroupe->setShowGrid(true);
-    TWGroupe->setRowCount(0);
-    TWGroupe->setColumnCount(2);
-
-    gridLayout2->addWidget(TWGroupe, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GBOptions, 0, 0, 1, 1);
-
-
-    retranslateUi(CreateListGroup);
-
-    QSize size(717, 600);
-    size = size.expandedTo(CreateListGroup->minimumSizeHint());
-    CreateListGroup->resize(size);
-
-
-    QMetaObject::connectSlotsByName(CreateListGroup);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateListGroup)
-    {
-    CreateListGroup->setWindowTitle(QApplication::translate("CreateListGroup", "Selection of groups", 0, QApplication::UnicodeUTF8));
-    GBButtons->setTitle(QString());
-    buttonHelp->setText(QApplication::translate("CreateListGroup", "Help", 0, QApplication::UnicodeUTF8));
-    buttonCancel->setText(QApplication::translate("CreateListGroup", "Cancel", 0, QApplication::UnicodeUTF8));
-    buttonApply->setText(QApplication::translate("CreateListGroup", "Apply", 0, QApplication::UnicodeUTF8));
-    buttonOk->setText(QApplication::translate("CreateListGroup", "OK", 0, QApplication::UnicodeUTF8));
-    GBOptions->setTitle(QApplication::translate("CreateListGroup", "Selected groups", 0, QApplication::UnicodeUTF8));
-    if (TWGroupe->columnCount() < 2)
-        TWGroupe->setColumnCount(2);
-
-    QTableWidgetItem *__colItem = new QTableWidgetItem();
-    __colItem->setText(QApplication::translate("CreateListGroup", "Selection", 0, QApplication::UnicodeUTF8));
-    TWGroupe->setHorizontalHeaderItem(0, __colItem);
-
-    QTableWidgetItem *__colItem1 = new QTableWidgetItem();
-    __colItem1->setText(QApplication::translate("CreateListGroup", "Group", 0, QApplication::UnicodeUTF8));
-    TWGroupe->setHorizontalHeaderItem(1, __colItem1);
-    Q_UNUSED(CreateListGroup);
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateListGroup: public Ui_CreateListGroup {};
-} // namespace Ui
-
-#endif // CREATELISTGROUP_H
diff --git a/src/HOMARDGUI/CreateYACS.ui b/src/HOMARDGUI/CreateYACS.ui
new file mode 100644 (file)
index 0000000..0e8f76c
--- /dev/null
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CreateYACS</class>
+ <widget class="QScrollArea" name="CreateYACS">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>684</width>
+    <height>649</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>600</width>
+    <height>500</height>
+   </size>
+  </property>
+  <property name="sizeIncrement">
+   <size>
+    <width>1</width>
+    <height>1</height>
+   </size>
+  </property>
+  <property name="baseSize">
+   <size>
+    <width>600</width>
+    <height>500</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Create YACS</string>
+  </property>
+  <property name="widgetResizable">
+   <bool>true</bool>
+  </property>
+  <widget class="QWidget" name="scrollAreaWidgetContents">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>680</width>
+     <height>645</height>
+    </rect>
+   </property>
+   <property name="sizeGripEnabled" stdset="0">
+    <bool>true</bool>
+   </property>
+   <layout class="QGridLayout" name="gridLayout_5">
+    <item row="0" column="0">
+     <widget class="QWidget" name="WName" native="true">
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <widget class="QLabel" name="Name">
+         <property name="text">
+          <string>Name</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="LEName">
+         <property name="maxLength">
+          <number>32</number>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>131</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="0" colspan="2">
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="Case">
+        <property name="text">
+         <string>Case</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="PBCaseName">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>50</width>
+          <height>27</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLineEdit" name="LECaseName">
+        <property name="minimumSize">
+         <size>
+          <width>382</width>
+          <height>21</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item row="2" column="0" colspan="2">
+     <layout class="QHBoxLayout" name="_2">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <property name="margin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="Script">
+        <property name="text">
+         <string>Script</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="PBScriptFile">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LEScriptFile">
+        <property name="minimumSize">
+         <size>
+          <width>382</width>
+          <height>21</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item row="3" column="0" colspan="2">
+     <layout class="QHBoxLayout">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <property name="margin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="DirectoryStart">
+        <property name="text">
+         <string>Directory</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="PBDir">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LEDirName">
+        <property name="minimumSize">
+         <size>
+          <width>382</width>
+          <height>21</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item row="4" column="0" colspan="2">
+     <layout class="QHBoxLayout" name="_3">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <property name="margin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="MeshFile">
+        <property name="text">
+         <string>Mesh file</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="PBMeshFile">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LEMeshFile">
+        <property name="minimumSize">
+         <size>
+          <width>382</width>
+          <height>21</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item row="5" column="0">
+     <widget class="QGroupBox" name="GBTypeSchema">
+      <property name="title">
+       <string>Type of schema</string>
+      </property>
+      <layout class="QHBoxLayout" name="_4">
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <item>
+        <widget class="QRadioButton" name="RBConstant">
+         <property name="text">
+          <string>Constant</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QRadioButton" name="RBVariable">
+         <property name="text">
+          <string>Variable</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="6" column="0">
+     <widget class="QGroupBox" name="GBMax">
+      <property name="title">
+       <string>Maximum of ...</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <item row="0" column="0">
+        <widget class="QLabel" name="TLMaxIteration">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Iterations</string>
+         </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QSpinBox" name="SpinBoxMaxIter">
+         <property name="minimum">
+          <number>0</number>
+         </property>
+         <property name="maximum">
+          <number>999999999</number>
+         </property>
+         <property name="value">
+          <number>0</number>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="TLMaxNodes">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Nodes</string>
+         </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QSpinBox" name="SpinBoxMaxNode">
+         <property name="minimum">
+          <number>0</number>
+         </property>
+         <property name="maximum">
+          <number>999999999</number>
+         </property>
+         <property name="singleStep">
+          <number>1000</number>
+         </property>
+         <property name="value">
+          <number>0</number>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="QLabel" name="TLMaxElem">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Elements</string>
+         </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="3">
+        <widget class="QSpinBox" name="SpinBoxMaxElem">
+         <property name="minimum">
+          <number>0</number>
+         </property>
+         <property name="maximum">
+          <number>999999999</number>
+         </property>
+         <property name="singleStep">
+          <number>1000</number>
+         </property>
+         <property name="value">
+          <number>0</number>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="6" column="1">
+     <spacer name="horizontalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>269</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="7" column="0">
+     <widget class="QGroupBox" name="GBConvergence">
+      <property name="title">
+       <string>Test of convergence</string>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_4">
+       <item row="0" column="0">
+        <widget class="QRadioButton" name="RBNone">
+         <property name="text">
+          <string>None</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QRadioButton" name="RBVMinAbs">
+         <property name="text">
+          <string>Vtest &gt; Vref</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2">
+        <widget class="QRadioButton" name="RBVMaxAbs">
+         <property name="text">
+          <string>Vtest &lt; Vref</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="labelVref">
+         <property name="text">
+          <string>Vref</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QDoubleSpinBox" name="doubleSpinBoxConvergence">
+         <property name="decimals">
+          <number>4</number>
+         </property>
+         <property name="minimum">
+          <double>-999999999.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>999999999.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="7" column="1">
+     <spacer name="horizontalSpacer_3">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>269</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="8" column="0">
+     <widget class="QGroupBox" name="GroupButtons">
+      <property name="title">
+       <string/>
+      </property>
+      <layout class="QGridLayout">
+       <property name="margin">
+        <number>9</number>
+       </property>
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <item row="0" column="4">
+        <widget class="QPushButton" name="buttonHelp">
+         <property name="text">
+          <string>Help</string>
+         </property>
+         <property name="autoDefault">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QPushButton" name="buttonApply">
+         <property name="text">
+          <string>Apply</string>
+         </property>
+         <property name="autoDefault">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QPushButton" name="buttonOk">
+         <property name="text">
+          <string>OK</string>
+         </property>
+         <property name="autoDefault">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2">
+        <widget class="QPushButton" name="buttonCancel">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+         <property name="autoDefault">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="8" column="1">
+     <spacer name="spacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeType">
+       <enum>QSizePolicy::Fixed</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>128</width>
+        <height>25</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/HOMARDGUI/CreateZone.h b/src/HOMARDGUI/CreateZone.h
deleted file mode 100644 (file)
index 70b1d12..0000000
+++ /dev/null
@@ -1,854 +0,0 @@
-/********************************************************************************
-** Form generated from reading ui file 'CreateZone.ui'
-**
-** Created: Thu Sep 1 13:03:50 2011
-**      by: Qt User Interface Compiler version 4.2.1
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
-#ifndef CREATEZONE_H
-#define CREATEZONE_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QDialog>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-
-class Ui_CreateZone
-{
-public:
-    QGridLayout *gridLayout;
-    QGroupBox *GBButtons;
-    QGridLayout *gridLayout1;
-    QPushButton *buttonHelp;
-    QPushButton *buttonCancel;
-    QPushButton *buttonApply;
-    QPushButton *buttonOk;
-    QGroupBox *TypeZone;
-    QGridLayout *gridLayout2;
-    QRadioButton *RBSphere;
-    QRadioButton *RBPipe;
-    QRadioButton *RBCylinder;
-    QRadioButton *RBBox;
-    QGroupBox *gBCylindre;
-    QGridLayout *gridLayout3;
-    QDoubleSpinBox *SpinBox_Haut;
-    QLabel *TLHaut;
-    QLabel *TLRadius;
-    QDoubleSpinBox *SpinBox_Xaxis;
-    QDoubleSpinBox *SpinBox_Yaxis;
-    QDoubleSpinBox *SpinBox_Zaxis;
-    QLabel *TLZaxis;
-    QLabel *TLYaxis;
-    QLabel *TLXaxis;
-    QDoubleSpinBox *SpinBox_Ybase;
-    QLabel *TLYbase;
-    QLabel *TLZbase;
-    QDoubleSpinBox *SpinBox_Zbase;
-    QDoubleSpinBox *SpinBox_Radius;
-    QLabel *TLXbase;
-    QDoubleSpinBox *SpinBox_Xbase;
-    QGroupBox *gBSphere;
-    QGridLayout *gridLayout4;
-    QLabel *TLXcentre;
-    QDoubleSpinBox *SpinBox_Xcentre;
-    QLabel *TLYcentre;
-    QDoubleSpinBox *SpinBox_Ycentre;
-    QLabel *TLRayon;
-    QDoubleSpinBox *SpinBox_Rayon;
-    QLabel *TLZcentre;
-    QDoubleSpinBox *SpinBox_Zcentre;
-    QGroupBox *gBBox;
-    QGridLayout *gridLayout5;
-    QLabel *TLXmini;
-    QDoubleSpinBox *SpinBox_Xmini;
-    QLabel *TLYmini;
-    QDoubleSpinBox *SpinBox_Ymini;
-    QLabel *TLZmini;
-    QDoubleSpinBox *SpinBox_Zmini;
-    QLabel *TLXmaxi;
-    QLabel *TLZmaxi;
-    QDoubleSpinBox *SpinBox_Zmaxi;
-    QLabel *TLYmaxi;
-    QDoubleSpinBox *SpinBox_Xmaxi;
-    QDoubleSpinBox *SpinBox_Ymaxi;
-    QLineEdit *LEZoneName;
-    QLabel *Name;
-    QGroupBox *gBPipe;
-    QGridLayout *gridLayout6;
-    QLabel *TLHaut_p;
-    QDoubleSpinBox *SpinBox_Xbase_p;
-    QLabel *TLXbase_p;
-    QDoubleSpinBox *SpinBox_Radius_int;
-    QDoubleSpinBox *SpinBox_Zbase_p;
-    QLabel *TLRadius_int;
-    QLabel *TLZbase_p;
-    QLabel *TLYbase_p;
-    QDoubleSpinBox *SpinBox_Ybase_p;
-    QLabel *TLXaxis_p;
-    QLabel *TLYaxis_p;
-    QLabel *TLZaxis_p;
-    QDoubleSpinBox *SpinBox_Zaxis_p;
-    QDoubleSpinBox *SpinBox_Yaxis_p;
-    QDoubleSpinBox *SpinBox_Xaxis_p;
-    QDoubleSpinBox *SpinBox_Radius_ext;
-    QLabel *TLRadius_ext;
-    QDoubleSpinBox *SpinBox_Haut_p;
-
-    void setupUi(QDialog *CreateZone)
-    {
-    CreateZone->setObjectName(QString::fromUtf8("CreateZone"));
-    CreateZone->setAutoFillBackground(true);
-    CreateZone->setSizeGripEnabled(true);
-    gridLayout = new QGridLayout(CreateZone);
-    gridLayout->setSpacing(6);
-    gridLayout->setMargin(9);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    GBButtons = new QGroupBox(CreateZone);
-    GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
-    QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy.setHorizontalStretch(0);
-    sizePolicy.setVerticalStretch(0);
-    sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth());
-    GBButtons->setSizePolicy(sizePolicy);
-    gridLayout1 = new QGridLayout(GBButtons);
-    gridLayout1->setSpacing(6);
-    gridLayout1->setMargin(9);
-    gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-    buttonHelp = new QPushButton(GBButtons);
-    buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
-
-    gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
-
-    buttonCancel = new QPushButton(GBButtons);
-    buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
-
-    gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
-
-    buttonApply = new QPushButton(GBButtons);
-    buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
-
-    gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
-
-    buttonOk = new QPushButton(GBButtons);
-    buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
-
-    gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GBButtons, 6, 0, 1, 2);
-
-    TypeZone = new QGroupBox(CreateZone);
-    TypeZone->setObjectName(QString::fromUtf8("TypeZone"));
-    QSizePolicy sizePolicy1(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy1.setHorizontalStretch(0);
-    sizePolicy1.setVerticalStretch(0);
-    sizePolicy1.setHeightForWidth(TypeZone->sizePolicy().hasHeightForWidth());
-    TypeZone->setSizePolicy(sizePolicy1);
-    TypeZone->setMinimumSize(QSize(340, 0));
-    gridLayout2 = new QGridLayout(TypeZone);
-    gridLayout2->setSpacing(6);
-    gridLayout2->setMargin(9);
-    gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
-    RBSphere = new QRadioButton(TypeZone);
-    RBSphere->setObjectName(QString::fromUtf8("RBSphere"));
-    RBSphere->setIcon(QIcon(QString::fromUtf8("../../resources/zone_spherepoint.png")));
-
-    gridLayout2->addWidget(RBSphere, 0, 3, 1, 1);
-
-    RBPipe = new QRadioButton(TypeZone);
-    RBPipe->setObjectName(QString::fromUtf8("RBPipe"));
-    RBPipe->setIcon(QIcon(QString::fromUtf8("../../resources/pipe.png")));
-
-    gridLayout2->addWidget(RBPipe, 0, 2, 1, 1);
-
-    RBCylinder = new QRadioButton(TypeZone);
-    RBCylinder->setObjectName(QString::fromUtf8("RBCylinder"));
-    RBCylinder->setIcon(QIcon(QString::fromUtf8("../../resources/cylinderpointvector.png")));
-
-    gridLayout2->addWidget(RBCylinder, 0, 1, 1, 1);
-
-    RBBox = new QRadioButton(TypeZone);
-    RBBox->setObjectName(QString::fromUtf8("RBBox"));
-    RBBox->setIcon(QIcon(QString::fromUtf8("../../resources/zone_boxdxyz.png")));
-    RBBox->setCheckable(true);
-    RBBox->setChecked(true);
-
-    gridLayout2->addWidget(RBBox, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(TypeZone, 1, 0, 1, 2);
-
-    gBCylindre = new QGroupBox(CreateZone);
-    gBCylindre->setObjectName(QString::fromUtf8("gBCylindre"));
-    QSizePolicy sizePolicy2(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy2.setHorizontalStretch(0);
-    sizePolicy2.setVerticalStretch(0);
-    sizePolicy2.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth());
-    gBCylindre->setSizePolicy(sizePolicy2);
-    gBCylindre->setFocusPolicy(Qt::TabFocus);
-    gridLayout3 = new QGridLayout(gBCylindre);
-    gridLayout3->setSpacing(6);
-    gridLayout3->setMargin(9);
-    gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
-    SpinBox_Haut = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Haut->setObjectName(QString::fromUtf8("SpinBox_Haut"));
-    SpinBox_Haut->setDecimals(5);
-    SpinBox_Haut->setMaximum(1e+09);
-
-    gridLayout3->addWidget(SpinBox_Haut, 4, 1, 1, 1);
-
-    TLHaut = new QLabel(gBCylindre);
-    TLHaut->setObjectName(QString::fromUtf8("TLHaut"));
-    QSizePolicy sizePolicy3(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy3.setHorizontalStretch(0);
-    sizePolicy3.setVerticalStretch(0);
-    sizePolicy3.setHeightForWidth(TLHaut->sizePolicy().hasHeightForWidth());
-    TLHaut->setSizePolicy(sizePolicy3);
-    TLHaut->setWordWrap(false);
-
-    gridLayout3->addWidget(TLHaut, 4, 0, 1, 1);
-
-    TLRadius = new QLabel(gBCylindre);
-    TLRadius->setObjectName(QString::fromUtf8("TLRadius"));
-    QSizePolicy sizePolicy4(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy4.setHorizontalStretch(0);
-    sizePolicy4.setVerticalStretch(0);
-    sizePolicy4.setHeightForWidth(TLRadius->sizePolicy().hasHeightForWidth());
-    TLRadius->setSizePolicy(sizePolicy4);
-    TLRadius->setWordWrap(false);
-
-    gridLayout3->addWidget(TLRadius, 3, 0, 1, 1);
-
-    SpinBox_Xaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Xaxis->setObjectName(QString::fromUtf8("SpinBox_Xaxis"));
-    SpinBox_Xaxis->setDecimals(5);
-    SpinBox_Xaxis->setMaximum(1e+09);
-    SpinBox_Xaxis->setMinimum(-1e+09);
-    SpinBox_Xaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Xaxis, 0, 3, 1, 1);
-
-    SpinBox_Yaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Yaxis->setObjectName(QString::fromUtf8("SpinBox_Yaxis"));
-    SpinBox_Yaxis->setDecimals(5);
-    SpinBox_Yaxis->setMaximum(1e+09);
-    SpinBox_Yaxis->setMinimum(-1e+09);
-    SpinBox_Yaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Yaxis, 1, 3, 1, 1);
-
-    SpinBox_Zaxis = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Zaxis->setObjectName(QString::fromUtf8("SpinBox_Zaxis"));
-    SpinBox_Zaxis->setDecimals(5);
-    SpinBox_Zaxis->setMaximum(1e+09);
-    SpinBox_Zaxis->setMinimum(-1e+09);
-    SpinBox_Zaxis->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Zaxis, 2, 3, 1, 1);
-
-    TLZaxis = new QLabel(gBCylindre);
-    TLZaxis->setObjectName(QString::fromUtf8("TLZaxis"));
-    QSizePolicy sizePolicy5(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy5.setHorizontalStretch(0);
-    sizePolicy5.setVerticalStretch(0);
-    sizePolicy5.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth());
-    TLZaxis->setSizePolicy(sizePolicy5);
-    TLZaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLZaxis, 2, 2, 1, 1);
-
-    TLYaxis = new QLabel(gBCylindre);
-    TLYaxis->setObjectName(QString::fromUtf8("TLYaxis"));
-    QSizePolicy sizePolicy6(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy6.setHorizontalStretch(0);
-    sizePolicy6.setVerticalStretch(0);
-    sizePolicy6.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth());
-    TLYaxis->setSizePolicy(sizePolicy6);
-    TLYaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLYaxis, 1, 2, 1, 1);
-
-    TLXaxis = new QLabel(gBCylindre);
-    TLXaxis->setObjectName(QString::fromUtf8("TLXaxis"));
-    QSizePolicy sizePolicy7(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy7.setHorizontalStretch(0);
-    sizePolicy7.setVerticalStretch(0);
-    sizePolicy7.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth());
-    TLXaxis->setSizePolicy(sizePolicy7);
-    TLXaxis->setWordWrap(false);
-
-    gridLayout3->addWidget(TLXaxis, 0, 2, 1, 1);
-
-    SpinBox_Ybase = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Ybase->setObjectName(QString::fromUtf8("SpinBox_Ybase"));
-    SpinBox_Ybase->setDecimals(5);
-    SpinBox_Ybase->setMaximum(1e+09);
-    SpinBox_Ybase->setMinimum(-1e+09);
-    SpinBox_Ybase->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Ybase, 1, 1, 1, 1);
-
-    TLYbase = new QLabel(gBCylindre);
-    TLYbase->setObjectName(QString::fromUtf8("TLYbase"));
-    QSizePolicy sizePolicy8(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy8.setHorizontalStretch(0);
-    sizePolicy8.setVerticalStretch(0);
-    sizePolicy8.setHeightForWidth(TLYbase->sizePolicy().hasHeightForWidth());
-    TLYbase->setSizePolicy(sizePolicy8);
-    TLYbase->setWordWrap(false);
-
-    gridLayout3->addWidget(TLYbase, 1, 0, 1, 1);
-
-    TLZbase = new QLabel(gBCylindre);
-    TLZbase->setObjectName(QString::fromUtf8("TLZbase"));
-    QSizePolicy sizePolicy9(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy9.setHorizontalStretch(0);
-    sizePolicy9.setVerticalStretch(0);
-    sizePolicy9.setHeightForWidth(TLZbase->sizePolicy().hasHeightForWidth());
-    TLZbase->setSizePolicy(sizePolicy9);
-    TLZbase->setWordWrap(false);
-
-    gridLayout3->addWidget(TLZbase, 2, 0, 1, 1);
-
-    SpinBox_Zbase = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Zbase->setObjectName(QString::fromUtf8("SpinBox_Zbase"));
-    SpinBox_Zbase->setDecimals(5);
-    SpinBox_Zbase->setMaximum(1e+09);
-    SpinBox_Zbase->setMinimum(-1e+09);
-    SpinBox_Zbase->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Zbase, 2, 1, 1, 1);
-
-    SpinBox_Radius = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius"));
-    SpinBox_Radius->setDecimals(5);
-    SpinBox_Radius->setMaximum(1e+09);
-
-    gridLayout3->addWidget(SpinBox_Radius, 3, 1, 1, 1);
-
-    TLXbase = new QLabel(gBCylindre);
-    TLXbase->setObjectName(QString::fromUtf8("TLXbase"));
-    QSizePolicy sizePolicy10(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy10.setHorizontalStretch(0);
-    sizePolicy10.setVerticalStretch(0);
-    sizePolicy10.setHeightForWidth(TLXbase->sizePolicy().hasHeightForWidth());
-    TLXbase->setSizePolicy(sizePolicy10);
-    TLXbase->setWordWrap(false);
-
-    gridLayout3->addWidget(TLXbase, 0, 0, 1, 1);
-
-    SpinBox_Xbase = new QDoubleSpinBox(gBCylindre);
-    SpinBox_Xbase->setObjectName(QString::fromUtf8("SpinBox_Xbase"));
-    SpinBox_Xbase->setDecimals(5);
-    SpinBox_Xbase->setMaximum(1e+09);
-    SpinBox_Xbase->setMinimum(-1e+09);
-    SpinBox_Xbase->setValue(0);
-
-    gridLayout3->addWidget(SpinBox_Xbase, 0, 1, 1, 1);
-
-
-    gridLayout->addWidget(gBCylindre, 4, 0, 1, 2);
-
-    gBSphere = new QGroupBox(CreateZone);
-    gBSphere->setObjectName(QString::fromUtf8("gBSphere"));
-    QSizePolicy sizePolicy11(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy11.setHorizontalStretch(0);
-    sizePolicy11.setVerticalStretch(0);
-    sizePolicy11.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth());
-    gBSphere->setSizePolicy(sizePolicy11);
-    gridLayout4 = new QGridLayout(gBSphere);
-    gridLayout4->setSpacing(6);
-    gridLayout4->setMargin(9);
-    gridLayout4->setObjectName(QString::fromUtf8("gridLayout4"));
-    TLXcentre = new QLabel(gBSphere);
-    TLXcentre->setObjectName(QString::fromUtf8("TLXcentre"));
-    QSizePolicy sizePolicy12(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy12.setHorizontalStretch(0);
-    sizePolicy12.setVerticalStretch(0);
-    sizePolicy12.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth());
-    TLXcentre->setSizePolicy(sizePolicy12);
-    TLXcentre->setWordWrap(false);
-
-    gridLayout4->addWidget(TLXcentre, 0, 0, 1, 1);
-
-    SpinBox_Xcentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre"));
-    SpinBox_Xcentre->setDecimals(5);
-    SpinBox_Xcentre->setMaximum(1e+09);
-    SpinBox_Xcentre->setMinimum(-1e+09);
-    SpinBox_Xcentre->setValue(0);
-
-    gridLayout4->addWidget(SpinBox_Xcentre, 0, 1, 1, 1);
-
-    TLYcentre = new QLabel(gBSphere);
-    TLYcentre->setObjectName(QString::fromUtf8("TLYcentre"));
-    QSizePolicy sizePolicy13(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy13.setHorizontalStretch(0);
-    sizePolicy13.setVerticalStretch(0);
-    sizePolicy13.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth());
-    TLYcentre->setSizePolicy(sizePolicy13);
-    TLYcentre->setWordWrap(false);
-
-    gridLayout4->addWidget(TLYcentre, 1, 0, 1, 1);
-
-    SpinBox_Ycentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre"));
-    SpinBox_Ycentre->setDecimals(5);
-    SpinBox_Ycentre->setMaximum(1e+09);
-    SpinBox_Ycentre->setMinimum(-1e+09);
-    SpinBox_Ycentre->setValue(0);
-
-    gridLayout4->addWidget(SpinBox_Ycentre, 1, 1, 1, 1);
-
-    TLRayon = new QLabel(gBSphere);
-    TLRayon->setObjectName(QString::fromUtf8("TLRayon"));
-    QSizePolicy sizePolicy14(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy14.setHorizontalStretch(0);
-    sizePolicy14.setVerticalStretch(0);
-    sizePolicy14.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth());
-    TLRayon->setSizePolicy(sizePolicy14);
-    TLRayon->setWordWrap(false);
-
-    gridLayout4->addWidget(TLRayon, 1, 2, 1, 1);
-
-    SpinBox_Rayon = new QDoubleSpinBox(gBSphere);
-    SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon"));
-    SpinBox_Rayon->setDecimals(5);
-    SpinBox_Rayon->setMaximum(1e+09);
-    SpinBox_Rayon->setMinimum(-1e+09);
-    SpinBox_Rayon->setValue(0);
-
-    gridLayout4->addWidget(SpinBox_Rayon, 1, 3, 1, 1);
-
-    TLZcentre = new QLabel(gBSphere);
-    TLZcentre->setObjectName(QString::fromUtf8("TLZcentre"));
-    QSizePolicy sizePolicy15(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy15.setHorizontalStretch(0);
-    sizePolicy15.setVerticalStretch(0);
-    sizePolicy15.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth());
-    TLZcentre->setSizePolicy(sizePolicy15);
-    TLZcentre->setWordWrap(false);
-
-    gridLayout4->addWidget(TLZcentre, 2, 0, 1, 1);
-
-    SpinBox_Zcentre = new QDoubleSpinBox(gBSphere);
-    SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre"));
-    SpinBox_Zcentre->setDecimals(5);
-    SpinBox_Zcentre->setMaximum(1e+09);
-    SpinBox_Zcentre->setMinimum(-1e+09);
-    SpinBox_Zcentre->setValue(0);
-
-    gridLayout4->addWidget(SpinBox_Zcentre, 2, 1, 1, 1);
-
-
-    gridLayout->addWidget(gBSphere, 3, 0, 1, 2);
-
-    gBBox = new QGroupBox(CreateZone);
-    gBBox->setObjectName(QString::fromUtf8("gBBox"));
-    QSizePolicy sizePolicy16(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy16.setHorizontalStretch(0);
-    sizePolicy16.setVerticalStretch(0);
-    sizePolicy16.setHeightForWidth(gBBox->sizePolicy().hasHeightForWidth());
-    gBBox->setSizePolicy(sizePolicy16);
-    gridLayout5 = new QGridLayout(gBBox);
-    gridLayout5->setSpacing(6);
-    gridLayout5->setMargin(9);
-    gridLayout5->setObjectName(QString::fromUtf8("gridLayout5"));
-    TLXmini = new QLabel(gBBox);
-    TLXmini->setObjectName(QString::fromUtf8("TLXmini"));
-    QSizePolicy sizePolicy17(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy17.setHorizontalStretch(0);
-    sizePolicy17.setVerticalStretch(0);
-    sizePolicy17.setHeightForWidth(TLXmini->sizePolicy().hasHeightForWidth());
-    TLXmini->setSizePolicy(sizePolicy17);
-    TLXmini->setWordWrap(false);
-
-    gridLayout5->addWidget(TLXmini, 0, 0, 1, 1);
-
-    SpinBox_Xmini = new QDoubleSpinBox(gBBox);
-    SpinBox_Xmini->setObjectName(QString::fromUtf8("SpinBox_Xmini"));
-    SpinBox_Xmini->setDecimals(5);
-    SpinBox_Xmini->setMaximum(1e+09);
-    SpinBox_Xmini->setMinimum(-1e+09);
-    SpinBox_Xmini->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Xmini, 0, 1, 1, 1);
-
-    TLYmini = new QLabel(gBBox);
-    TLYmini->setObjectName(QString::fromUtf8("TLYmini"));
-    QSizePolicy sizePolicy18(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy18.setHorizontalStretch(0);
-    sizePolicy18.setVerticalStretch(0);
-    sizePolicy18.setHeightForWidth(TLYmini->sizePolicy().hasHeightForWidth());
-    TLYmini->setSizePolicy(sizePolicy18);
-    TLYmini->setWordWrap(false);
-
-    gridLayout5->addWidget(TLYmini, 1, 0, 1, 1);
-
-    SpinBox_Ymini = new QDoubleSpinBox(gBBox);
-    SpinBox_Ymini->setObjectName(QString::fromUtf8("SpinBox_Ymini"));
-    SpinBox_Ymini->setDecimals(5);
-    SpinBox_Ymini->setMaximum(1e+09);
-    SpinBox_Ymini->setMinimum(-1e+09);
-    SpinBox_Ymini->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Ymini, 1, 1, 1, 1);
-
-    TLZmini = new QLabel(gBBox);
-    TLZmini->setObjectName(QString::fromUtf8("TLZmini"));
-    QSizePolicy sizePolicy19(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy19.setHorizontalStretch(0);
-    sizePolicy19.setVerticalStretch(0);
-    sizePolicy19.setHeightForWidth(TLZmini->sizePolicy().hasHeightForWidth());
-    TLZmini->setSizePolicy(sizePolicy19);
-    TLZmini->setWordWrap(false);
-
-    gridLayout5->addWidget(TLZmini, 2, 0, 1, 1);
-
-    SpinBox_Zmini = new QDoubleSpinBox(gBBox);
-    SpinBox_Zmini->setObjectName(QString::fromUtf8("SpinBox_Zmini"));
-    SpinBox_Zmini->setDecimals(5);
-    SpinBox_Zmini->setMaximum(1e+09);
-    SpinBox_Zmini->setMinimum(-1e+09);
-    SpinBox_Zmini->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Zmini, 2, 1, 1, 1);
-
-    TLXmaxi = new QLabel(gBBox);
-    TLXmaxi->setObjectName(QString::fromUtf8("TLXmaxi"));
-    QSizePolicy sizePolicy20(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy20.setHorizontalStretch(0);
-    sizePolicy20.setVerticalStretch(0);
-    sizePolicy20.setHeightForWidth(TLXmaxi->sizePolicy().hasHeightForWidth());
-    TLXmaxi->setSizePolicy(sizePolicy20);
-    TLXmaxi->setWordWrap(false);
-
-    gridLayout5->addWidget(TLXmaxi, 0, 2, 1, 1);
-
-    TLZmaxi = new QLabel(gBBox);
-    TLZmaxi->setObjectName(QString::fromUtf8("TLZmaxi"));
-    QSizePolicy sizePolicy21(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy21.setHorizontalStretch(0);
-    sizePolicy21.setVerticalStretch(0);
-    sizePolicy21.setHeightForWidth(TLZmaxi->sizePolicy().hasHeightForWidth());
-    TLZmaxi->setSizePolicy(sizePolicy21);
-    TLZmaxi->setWordWrap(false);
-
-    gridLayout5->addWidget(TLZmaxi, 2, 2, 1, 1);
-
-    SpinBox_Zmaxi = new QDoubleSpinBox(gBBox);
-    SpinBox_Zmaxi->setObjectName(QString::fromUtf8("SpinBox_Zmaxi"));
-    SpinBox_Zmaxi->setDecimals(5);
-    SpinBox_Zmaxi->setMaximum(1e+09);
-    SpinBox_Zmaxi->setMinimum(-1e+09);
-    SpinBox_Zmaxi->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Zmaxi, 2, 3, 1, 1);
-
-    TLYmaxi = new QLabel(gBBox);
-    TLYmaxi->setObjectName(QString::fromUtf8("TLYmaxi"));
-    QSizePolicy sizePolicy22(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy22.setHorizontalStretch(0);
-    sizePolicy22.setVerticalStretch(0);
-    sizePolicy22.setHeightForWidth(TLYmaxi->sizePolicy().hasHeightForWidth());
-    TLYmaxi->setSizePolicy(sizePolicy22);
-    TLYmaxi->setWordWrap(false);
-
-    gridLayout5->addWidget(TLYmaxi, 1, 2, 1, 1);
-
-    SpinBox_Xmaxi = new QDoubleSpinBox(gBBox);
-    SpinBox_Xmaxi->setObjectName(QString::fromUtf8("SpinBox_Xmaxi"));
-    SpinBox_Xmaxi->setDecimals(5);
-    SpinBox_Xmaxi->setMaximum(1e+09);
-    SpinBox_Xmaxi->setMinimum(-1e+09);
-    SpinBox_Xmaxi->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Xmaxi, 0, 3, 1, 1);
-
-    SpinBox_Ymaxi = new QDoubleSpinBox(gBBox);
-    SpinBox_Ymaxi->setObjectName(QString::fromUtf8("SpinBox_Ymaxi"));
-    SpinBox_Ymaxi->setDecimals(5);
-    SpinBox_Ymaxi->setMaximum(1e+09);
-    SpinBox_Ymaxi->setMinimum(-1e+09);
-    SpinBox_Ymaxi->setValue(0);
-
-    gridLayout5->addWidget(SpinBox_Ymaxi, 1, 3, 1, 1);
-
-
-    gridLayout->addWidget(gBBox, 2, 0, 1, 2);
-
-    LEZoneName = new QLineEdit(CreateZone);
-    LEZoneName->setObjectName(QString::fromUtf8("LEZoneName"));
-    LEZoneName->setMaxLength(32);
-
-    gridLayout->addWidget(LEZoneName, 0, 1, 1, 1);
-
-    Name = new QLabel(CreateZone);
-    Name->setObjectName(QString::fromUtf8("Name"));
-
-    gridLayout->addWidget(Name, 0, 0, 1, 1);
-
-    gBPipe = new QGroupBox(CreateZone);
-    gBPipe->setObjectName(QString::fromUtf8("gBPipe"));
-    QSizePolicy sizePolicy23(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy23.setHorizontalStretch(0);
-    sizePolicy23.setVerticalStretch(0);
-    sizePolicy23.setHeightForWidth(gBPipe->sizePolicy().hasHeightForWidth());
-    gBPipe->setSizePolicy(sizePolicy23);
-    gridLayout6 = new QGridLayout(gBPipe);
-    gridLayout6->setSpacing(6);
-    gridLayout6->setMargin(9);
-    gridLayout6->setObjectName(QString::fromUtf8("gridLayout6"));
-    TLHaut_p = new QLabel(gBPipe);
-    TLHaut_p->setObjectName(QString::fromUtf8("TLHaut_p"));
-    QSizePolicy sizePolicy24(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy24.setHorizontalStretch(0);
-    sizePolicy24.setVerticalStretch(0);
-    sizePolicy24.setHeightForWidth(TLHaut_p->sizePolicy().hasHeightForWidth());
-    TLHaut_p->setSizePolicy(sizePolicy24);
-    TLHaut_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLHaut_p, 4, 0, 1, 1);
-
-    SpinBox_Xbase_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Xbase_p->setObjectName(QString::fromUtf8("SpinBox_Xbase_p"));
-    SpinBox_Xbase_p->setDecimals(5);
-    SpinBox_Xbase_p->setMaximum(1e+09);
-    SpinBox_Xbase_p->setMinimum(-1e+09);
-    SpinBox_Xbase_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Xbase_p, 0, 1, 1, 1);
-
-    TLXbase_p = new QLabel(gBPipe);
-    TLXbase_p->setObjectName(QString::fromUtf8("TLXbase_p"));
-    QSizePolicy sizePolicy25(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy25.setHorizontalStretch(0);
-    sizePolicy25.setVerticalStretch(0);
-    sizePolicy25.setHeightForWidth(TLXbase_p->sizePolicy().hasHeightForWidth());
-    TLXbase_p->setSizePolicy(sizePolicy25);
-    TLXbase_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLXbase_p, 0, 0, 1, 1);
-
-    SpinBox_Radius_int = new QDoubleSpinBox(gBPipe);
-    SpinBox_Radius_int->setObjectName(QString::fromUtf8("SpinBox_Radius_int"));
-    SpinBox_Radius_int->setDecimals(5);
-    SpinBox_Radius_int->setMaximum(1e+09);
-
-    gridLayout6->addWidget(SpinBox_Radius_int, 3, 1, 1, 1);
-
-    SpinBox_Zbase_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Zbase_p->setObjectName(QString::fromUtf8("SpinBox_Zbase_p"));
-    SpinBox_Zbase_p->setDecimals(5);
-    SpinBox_Zbase_p->setMaximum(1e+09);
-    SpinBox_Zbase_p->setMinimum(-1e+09);
-    SpinBox_Zbase_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Zbase_p, 2, 1, 1, 1);
-
-    TLRadius_int = new QLabel(gBPipe);
-    TLRadius_int->setObjectName(QString::fromUtf8("TLRadius_int"));
-    QSizePolicy sizePolicy26(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy26.setHorizontalStretch(0);
-    sizePolicy26.setVerticalStretch(0);
-    sizePolicy26.setHeightForWidth(TLRadius_int->sizePolicy().hasHeightForWidth());
-    TLRadius_int->setSizePolicy(sizePolicy26);
-    TLRadius_int->setWordWrap(false);
-
-    gridLayout6->addWidget(TLRadius_int, 3, 0, 1, 1);
-
-    TLZbase_p = new QLabel(gBPipe);
-    TLZbase_p->setObjectName(QString::fromUtf8("TLZbase_p"));
-    QSizePolicy sizePolicy27(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy27.setHorizontalStretch(0);
-    sizePolicy27.setVerticalStretch(0);
-    sizePolicy27.setHeightForWidth(TLZbase_p->sizePolicy().hasHeightForWidth());
-    TLZbase_p->setSizePolicy(sizePolicy27);
-    TLZbase_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLZbase_p, 2, 0, 1, 1);
-
-    TLYbase_p = new QLabel(gBPipe);
-    TLYbase_p->setObjectName(QString::fromUtf8("TLYbase_p"));
-    QSizePolicy sizePolicy28(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy28.setHorizontalStretch(0);
-    sizePolicy28.setVerticalStretch(0);
-    sizePolicy28.setHeightForWidth(TLYbase_p->sizePolicy().hasHeightForWidth());
-    TLYbase_p->setSizePolicy(sizePolicy28);
-    TLYbase_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLYbase_p, 1, 0, 1, 1);
-
-    SpinBox_Ybase_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Ybase_p->setObjectName(QString::fromUtf8("SpinBox_Ybase_p"));
-    SpinBox_Ybase_p->setDecimals(5);
-    SpinBox_Ybase_p->setMaximum(1e+09);
-    SpinBox_Ybase_p->setMinimum(-1e+09);
-    SpinBox_Ybase_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Ybase_p, 1, 1, 1, 1);
-
-    TLXaxis_p = new QLabel(gBPipe);
-    TLXaxis_p->setObjectName(QString::fromUtf8("TLXaxis_p"));
-    QSizePolicy sizePolicy29(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy29.setHorizontalStretch(0);
-    sizePolicy29.setVerticalStretch(0);
-    sizePolicy29.setHeightForWidth(TLXaxis_p->sizePolicy().hasHeightForWidth());
-    TLXaxis_p->setSizePolicy(sizePolicy29);
-    TLXaxis_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLXaxis_p, 0, 2, 1, 1);
-
-    TLYaxis_p = new QLabel(gBPipe);
-    TLYaxis_p->setObjectName(QString::fromUtf8("TLYaxis_p"));
-    QSizePolicy sizePolicy30(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy30.setHorizontalStretch(0);
-    sizePolicy30.setVerticalStretch(0);
-    sizePolicy30.setHeightForWidth(TLYaxis_p->sizePolicy().hasHeightForWidth());
-    TLYaxis_p->setSizePolicy(sizePolicy30);
-    TLYaxis_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLYaxis_p, 1, 2, 1, 1);
-
-    TLZaxis_p = new QLabel(gBPipe);
-    TLZaxis_p->setObjectName(QString::fromUtf8("TLZaxis_p"));
-    QSizePolicy sizePolicy31(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy31.setHorizontalStretch(0);
-    sizePolicy31.setVerticalStretch(0);
-    sizePolicy31.setHeightForWidth(TLZaxis_p->sizePolicy().hasHeightForWidth());
-    TLZaxis_p->setSizePolicy(sizePolicy31);
-    TLZaxis_p->setWordWrap(false);
-
-    gridLayout6->addWidget(TLZaxis_p, 2, 2, 1, 1);
-
-    SpinBox_Zaxis_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Zaxis_p->setObjectName(QString::fromUtf8("SpinBox_Zaxis_p"));
-    SpinBox_Zaxis_p->setDecimals(5);
-    SpinBox_Zaxis_p->setMaximum(1e+09);
-    SpinBox_Zaxis_p->setMinimum(-1e+09);
-    SpinBox_Zaxis_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Zaxis_p, 2, 3, 1, 1);
-
-    SpinBox_Yaxis_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Yaxis_p->setObjectName(QString::fromUtf8("SpinBox_Yaxis_p"));
-    SpinBox_Yaxis_p->setDecimals(5);
-    SpinBox_Yaxis_p->setMaximum(1e+09);
-    SpinBox_Yaxis_p->setMinimum(-1e+09);
-    SpinBox_Yaxis_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Yaxis_p, 1, 3, 1, 1);
-
-    SpinBox_Xaxis_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Xaxis_p->setObjectName(QString::fromUtf8("SpinBox_Xaxis_p"));
-    SpinBox_Xaxis_p->setDecimals(5);
-    SpinBox_Xaxis_p->setMaximum(1e+09);
-    SpinBox_Xaxis_p->setMinimum(-1e+09);
-    SpinBox_Xaxis_p->setValue(0);
-
-    gridLayout6->addWidget(SpinBox_Xaxis_p, 0, 3, 1, 1);
-
-    SpinBox_Radius_ext = new QDoubleSpinBox(gBPipe);
-    SpinBox_Radius_ext->setObjectName(QString::fromUtf8("SpinBox_Radius_ext"));
-    SpinBox_Radius_ext->setDecimals(5);
-    SpinBox_Radius_ext->setMaximum(1e+09);
-
-    gridLayout6->addWidget(SpinBox_Radius_ext, 3, 3, 1, 1);
-
-    TLRadius_ext = new QLabel(gBPipe);
-    TLRadius_ext->setObjectName(QString::fromUtf8("TLRadius_ext"));
-    QSizePolicy sizePolicy32(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
-    sizePolicy32.setHorizontalStretch(0);
-    sizePolicy32.setVerticalStretch(0);
-    sizePolicy32.setHeightForWidth(TLRadius_ext->sizePolicy().hasHeightForWidth());
-    TLRadius_ext->setSizePolicy(sizePolicy32);
-    TLRadius_ext->setWordWrap(false);
-
-    gridLayout6->addWidget(TLRadius_ext, 3, 2, 1, 1);
-
-    SpinBox_Haut_p = new QDoubleSpinBox(gBPipe);
-    SpinBox_Haut_p->setObjectName(QString::fromUtf8("SpinBox_Haut_p"));
-    SpinBox_Haut_p->setDecimals(5);
-    SpinBox_Haut_p->setMaximum(1e+09);
-
-    gridLayout6->addWidget(SpinBox_Haut_p, 4, 1, 1, 1);
-
-
-    gridLayout->addWidget(gBPipe, 5, 0, 1, 2);
-
-
-    retranslateUi(CreateZone);
-
-    QSize size(551, 880);
-    size = size.expandedTo(CreateZone->minimumSizeHint());
-    CreateZone->resize(size);
-
-
-    QMetaObject::connectSlotsByName(CreateZone);
-    } // setupUi
-
-    void retranslateUi(QDialog *CreateZone)
-    {
-    CreateZone->setWindowTitle(QApplication::translate("CreateZone", "Create a zone", 0, QApplication::UnicodeUTF8));
-    GBButtons->setTitle(QString());
-    buttonHelp->setText(QApplication::translate("CreateZone", "Help", 0, QApplication::UnicodeUTF8));
-    buttonCancel->setText(QApplication::translate("CreateZone", "Cancel", 0, QApplication::UnicodeUTF8));
-    buttonApply->setText(QApplication::translate("CreateZone", "Apply", 0, QApplication::UnicodeUTF8));
-    buttonOk->setText(QApplication::translate("CreateZone", "OK", 0, QApplication::UnicodeUTF8));
-    TypeZone->setTitle(QApplication::translate("CreateZone", "Type of zone", 0, QApplication::UnicodeUTF8));
-    RBSphere->setText(QApplication::translate("CreateZone", "Sphere", 0, QApplication::UnicodeUTF8));
-    RBPipe->setText(QApplication::translate("CreateZone", "Pipe", 0, QApplication::UnicodeUTF8));
-    RBCylinder->setText(QApplication::translate("CreateZone", "Cylinder", 0, QApplication::UnicodeUTF8));
-    RBBox->setText(QApplication::translate("CreateZone", "Box", 0, QApplication::UnicodeUTF8));
-    gBCylindre->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLHaut->setText(QApplication::translate("CreateZone", "Height", 0, QApplication::UnicodeUTF8));
-    TLRadius->setText(QApplication::translate("CreateZone", "Radius", 0, QApplication::UnicodeUTF8));
-    TLZaxis->setText(QApplication::translate("CreateZone", "Z axis", 0, QApplication::UnicodeUTF8));
-    TLYaxis->setText(QApplication::translate("CreateZone", "Y axis", 0, QApplication::UnicodeUTF8));
-    TLXaxis->setText(QApplication::translate("CreateZone", "X axis", 0, QApplication::UnicodeUTF8));
-    TLYbase->setText(QApplication::translate("CreateZone", "Y base", 0, QApplication::UnicodeUTF8));
-    TLZbase->setText(QApplication::translate("CreateZone", "Z base", 0, QApplication::UnicodeUTF8));
-    TLXbase->setText(QApplication::translate("CreateZone", "X base", 0, QApplication::UnicodeUTF8));
-    gBSphere->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLXcentre->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
-    TLYcentre->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
-    TLRayon->setText(QApplication::translate("CreateZone", "Radius", 0, QApplication::UnicodeUTF8));
-    TLZcentre->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8));
-    gBBox->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLXmini->setText(QApplication::translate("CreateZone", "X mini", 0, QApplication::UnicodeUTF8));
-    TLYmini->setText(QApplication::translate("CreateZone", "Y mini", 0, QApplication::UnicodeUTF8));
-    TLZmini->setText(QApplication::translate("CreateZone", "Z mini", 0, QApplication::UnicodeUTF8));
-    TLXmaxi->setText(QApplication::translate("CreateZone", "X maxi", 0, QApplication::UnicodeUTF8));
-    TLZmaxi->setText(QApplication::translate("CreateZone", "Z maxi", 0, QApplication::UnicodeUTF8));
-    TLYmaxi->setText(QApplication::translate("CreateZone", "Y maxi", 0, QApplication::UnicodeUTF8));
-    Name->setText(QApplication::translate("CreateZone", "Name", 0, QApplication::UnicodeUTF8));
-    gBPipe->setTitle(QApplication::translate("CreateZone", "Coordinates", 0, QApplication::UnicodeUTF8));
-    TLHaut_p->setText(QApplication::translate("CreateZone", "Height", 0, QApplication::UnicodeUTF8));
-    TLXbase_p->setText(QApplication::translate("CreateZone", "X base", 0, QApplication::UnicodeUTF8));
-    TLRadius_int->setText(QApplication::translate("CreateZone", "Internal radius", 0, QApplication::UnicodeUTF8));
-    TLZbase_p->setText(QApplication::translate("CreateZone", "Z base", 0, QApplication::UnicodeUTF8));
-    TLYbase_p->setText(QApplication::translate("CreateZone", "Y base", 0, QApplication::UnicodeUTF8));
-    TLXaxis_p->setText(QApplication::translate("CreateZone", "X axis", 0, QApplication::UnicodeUTF8));
-    TLYaxis_p->setText(QApplication::translate("CreateZone", "Y axis", 0, QApplication::UnicodeUTF8));
-    TLZaxis_p->setText(QApplication::translate("CreateZone", "Z axis", 0, QApplication::UnicodeUTF8));
-    TLRadius_ext->setText(QApplication::translate("CreateZone", "External radius", 0, QApplication::UnicodeUTF8));
-    Q_UNUSED(CreateZone);
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class CreateZone: public Ui_CreateZone {};
-} // namespace Ui
-
-#endif // CREATEZONE_H
index aef1b45f8d61b7f60cbbe22f1e6a52d3602ae968..84a607516cd01eb0996c83aae0c1c6020e0b1117 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>CreateZone</class>
- <widget class="QDialog" name="CreateZone" >
-  <property name="geometry" >
+ <widget class="QDialog" name="CreateZone">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>551</width>
-    <height>880</height>
+    <width>545</width>
+    <height>778</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="sizeIncrement">
+   <size>
+    <width>1</width>
+    <height>1</height>
+   </size>
+  </property>
+  <property name="baseSize">
+   <size>
+    <width>550</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="windowTitle">
    <string>Create a zone</string>
   </property>
-  <property name="autoFillBackground" >
+  <property name="autoFillBackground">
    <bool>true</bool>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
-   </property>
-   <item row="6" column="0" colspan="2" >
-    <widget class="QGroupBox" name="GBButtons" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="Name">
+     <property name="text">
+      <string>Name</string>
      </property>
-     <property name="title" >
-      <string/>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="LEName">
+     <property name="maxLength">
+      <number>32</number>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item row="0" column="3" >
-       <widget class="QPushButton" name="buttonHelp" >
-        <property name="text" >
-         <string>Help</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="buttonCancel" >
-        <property name="text" >
-         <string>Cancel</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonApply" >
-        <property name="text" >
-         <string>Apply</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonOk" >
-        <property name="text" >
-         <string>OK</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
     </widget>
    </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="QGroupBox" name="TypeZone" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="0" column="2">
+    <spacer name="horizontalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>142</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="0" colspan="4">
+    <widget class="QGroupBox" name="TypeZone">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="minimumSize" >
+     <property name="minimumSize">
       <size>
        <width>340</width>
        <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Type of zone</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="3" >
-       <widget class="QRadioButton" name="RBSphere" >
-        <property name="text" >
+      <item row="0" column="3">
+       <widget class="QRadioButton" name="RBSphere">
+        <property name="text">
          <string>Sphere</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/zone_spherepoint.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/zone_spherepoint.png</normaloff>../../resources/zone_spherepoint.png</iconset>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QRadioButton" name="RBPipe" >
-        <property name="text" >
+      <item row="0" column="2">
+       <widget class="QRadioButton" name="RBPipe">
+        <property name="text">
          <string>Pipe</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/pipe.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/pipe.png</normaloff>../../resources/pipe.png</iconset>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QRadioButton" name="RBCylinder" >
-        <property name="text" >
+      <item row="0" column="1">
+       <widget class="QRadioButton" name="RBCylinder">
+        <property name="text">
          <string>Cylinder</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/cylinderpointvector.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/cylinderpointvector.png</normaloff>../../resources/cylinderpointvector.png</iconset>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QRadioButton" name="RBBox" >
-        <property name="text" >
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="RBBox">
+        <property name="text">
          <string>Box</string>
         </property>
-        <property name="icon" >
-         <iconset>../../resources/zone_boxdxyz.png</iconset>
+        <property name="icon">
+         <iconset>
+          <normaloff>../../resources/zone_boxdxyz.png</normaloff>../../resources/zone_boxdxyz.png</iconset>
         </property>
-        <property name="checkable" >
+        <property name="checkable">
          <bool>true</bool>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
-   <item row="4" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBCylindre" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="1" column="4">
+    <spacer name="horizontalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0" colspan="4">
+    <widget class="QGroupBox" name="gBBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="focusPolicy" >
-      <enum>Qt::TabFocus</enum>
-     </property>
-     <property name="title" >
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="4" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Haut" >
-        <property name="decimals" >
-         <number>5</number>
-        </property>
-        <property name="maximum" >
-         <double>1000000000.000000000000000</double>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0" >
-       <widget class="QLabel" name="TLHaut" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>Height</string>
-        </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0" >
-       <widget class="QLabel" name="TLRadius" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXmini">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Radius</string>
+        <property name="text">
+         <string>X mini</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis" >
-        <property name="decimals" >
-         <number>5</number>
-        </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
-        </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xmini">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis" >
-        <property name="decimals" >
-         <number>5</number>
-        </property>
-        <property name="maximum" >
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
-        </property>
-        <property name="value" >
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="2" column="2" >
-       <widget class="QLabel" name="TLZaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYmini">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z axis</string>
+        <property name="text">
+         <string>Y mini</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLYaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ymini">
+        <property name="decimals">
+         <number>5</number>
         </property>
-        <property name="text" >
-         <string>Y axis</string>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
         </property>
-        <property name="wordWrap" >
-         <bool>false</bool>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QLabel" name="TLXaxis" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZmini">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X axis</string>
+        <property name="text">
+         <string>Z mini</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ybase" >
-        <property name="decimals" >
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zmini">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYbase" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="2">
+       <widget class="QLabel" name="TLXmaxi">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Y base</string>
+        <property name="text">
+         <string>X maxi</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZbase" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLZmaxi">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z base</string>
+        <property name="text">
+         <string>Z maxi</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zbase" >
-        <property name="decimals" >
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zmaxi">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Radius" >
-        <property name="decimals" >
-         <number>5</number>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
         </property>
-        <property name="maximum" >
-         <double>1000000000.000000000000000</double>
+        <property name="value">
+         <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXbase" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLYmaxi">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X base</string>
+        <property name="text">
+         <string>Y maxi</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xbase" >
-        <property name="decimals" >
+      <item row="0" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xmaxi">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ymaxi">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
-   <item row="3" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBSphere" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="3" column="0" colspan="4">
+    <widget class="QGroupBox" name="gBSphere">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>X centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xcentre" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xcentre">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Y centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ycentre" >
-        <property name="decimals" >
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ycentre">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLRayon" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLRayon">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Radius</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Rayon" >
-        <property name="decimals" >
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Rayon">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
+        <property name="minimum">
+         <double>0.000000000000000</double>
         </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZcentre" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZcentre">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Z centre</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zcentre" >
-        <property name="decimals" >
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zcentre">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBBox" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="4" column="0" colspan="4">
+    <widget class="QGroupBox" name="gBCylindre">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="title" >
+     <property name="focusPolicy">
+      <enum>Qt::TabFocus</enum>
+     </property>
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXmini" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="4" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Haut">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="TLHaut">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X mini</string>
+        <property name="text">
+         <string>Height</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xmini" >
-        <property name="decimals" >
+      <item row="3" column="0">
+       <widget class="QLabel" name="TLRadius">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Radius</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
+         <double>-999999999.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYmini" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLZaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Y mini</string>
+        <property name="text">
+         <string>Z axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ymini" >
-        <property name="decimals" >
-         <number>5</number>
-        </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLYaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
         </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
+        <property name="text">
+         <string>Y axis</string>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
+        <property name="wordWrap">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZmini" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="2">
+       <widget class="QLabel" name="TLXaxis">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z mini</string>
+        <property name="text">
+         <string>X axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zmini" >
-        <property name="decimals" >
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ybase">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QLabel" name="TLXmaxi" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYbase">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>X maxi</string>
+        <property name="text">
+         <string>Y base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="2" >
-       <widget class="QLabel" name="TLZmaxi" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZbase">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Z maxi</string>
+        <property name="text">
+         <string>Z base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zmaxi" >
-        <property name="decimals" >
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zbase">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLYmaxi" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="3" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Radius">
+        <property name="decimals">
+         <number>5</number>
+        </property>
+        <property name="maximum">
+         <double>1000000000.000000000000000</double>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXbase">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
-         <string>Y maxi</string>
+        <property name="text">
+         <string>X base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xmaxi" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xbase">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
-         <double>0.000000000000000</double>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ymaxi" >
-        <property name="decimals" >
-         <number>5</number>
-        </property>
-        <property name="maximum" >
+        <property name="maximum">
          <double>999999999.000000000000000</double>
         </property>
-        <property name="minimum" >
-         <double>-999999999.000000000000000</double>
-        </property>
-        <property name="value" >
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
-   <item row="0" column="1" >
-    <widget class="QLineEdit" name="LEZoneName" >
-     <property name="maxLength" >
-      <number>32</number>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="0" >
-    <widget class="QLabel" name="Name" >
-     <property name="text" >
-      <string>Name</string>
-     </property>
-    </widget>
-   </item>
-   <item row="5" column="0" colspan="2" >
-    <widget class="QGroupBox" name="gBPipe" >
-     <property name="sizePolicy" >
-      <sizepolicy>
-       <hsizetype>0</hsizetype>
-       <vsizetype>0</vsizetype>
+   <item row="5" column="0" colspan="5">
+    <widget class="QGroupBox" name="gBPipe">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Coordinates</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="4" column="0" >
-       <widget class="QLabel" name="TLHaut_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="4" column="0">
+       <widget class="QLabel" name="TLHaut_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Height</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xbase_p" >
-        <property name="decimals" >
+      <item row="0" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xbase_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="TLXbase_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="0">
+       <widget class="QLabel" name="TLXbase_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>X base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Radius_int" >
-        <property name="decimals" >
+      <item row="3" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Radius_int">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <double>1000000000.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zbase_p" >
-        <property name="decimals" >
+      <item row="2" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zbase_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" >
-       <widget class="QLabel" name="TLRadius_int" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="3" column="0">
+       <widget class="QLabel" name="TLRadius_int">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Internal radius</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TLZbase_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TLZbase_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Z base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TLYbase_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TLYbase_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Y base</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Ybase_p" >
-        <property name="decimals" >
+      <item row="1" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Ybase_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QLabel" name="TLXaxis_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="0" column="2">
+       <widget class="QLabel" name="TLXaxis_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>X axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QLabel" name="TLYaxis_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="1" column="2">
+       <widget class="QLabel" name="TLYaxis_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Y axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="2" >
-       <widget class="QLabel" name="TLZaxis_p" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="2" column="2">
+       <widget class="QLabel" name="TLZaxis_p">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Z axis</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis_p" >
-        <property name="decimals" >
+      <item row="2" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Zaxis_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="1" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis_p" >
-        <property name="decimals" >
+      <item row="1" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Yaxis_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="0" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis_p" >
-        <property name="decimals" >
+      <item row="0" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Xaxis_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
-         <double>999999999.000000000000000</double>
-        </property>
-        <property name="minimum" >
+        <property name="minimum">
          <double>-999999999.000000000000000</double>
         </property>
-        <property name="value" >
+        <property name="maximum">
+         <double>999999999.000000000000000</double>
+        </property>
+        <property name="value">
          <double>0.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="3" column="3" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Radius_ext" >
-        <property name="decimals" >
+      <item row="3" column="3">
+       <widget class="QDoubleSpinBox" name="SpinBox_Radius_ext">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <double>1000000000.000000000000000</double>
         </property>
        </widget>
       </item>
-      <item row="3" column="2" >
-       <widget class="QLabel" name="TLRadius_ext" >
-        <property name="sizePolicy" >
-         <sizepolicy>
-          <hsizetype>0</hsizetype>
-          <vsizetype>0</vsizetype>
+      <item row="3" column="2">
+       <widget class="QLabel" name="TLRadius_ext">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>External radius</string>
         </property>
-        <property name="wordWrap" >
+        <property name="wordWrap">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="4" column="1" >
-       <widget class="QDoubleSpinBox" name="SpinBox_Haut_p" >
-        <property name="decimals" >
+      <item row="4" column="1">
+       <widget class="QDoubleSpinBox" name="SpinBox_Haut_p">
+        <property name="decimals">
          <number>5</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <double>1000000000.000000000000000</double>
         </property>
        </widget>
      </layout>
     </widget>
    </item>
+   <item row="6" column="0" colspan="3">
+    <widget class="QGroupBox" name="GBButtons">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>9</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="0" column="3">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
+         <string>Help</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
+         <string>Cancel</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
+         <string>Apply</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
+         <string>OK</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="6" column="3" colspan="2">
+    <spacer name="horizontalSpacer">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/src/HOMARDGUI/EditFile.h b/src/HOMARDGUI/EditFile.h
deleted file mode 100644 (file)
index 4248dd5..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/********************************************************************************
-** Form generated from reading ui file 'EditFile.ui'
-**
-** Created: Tue Mar 15 10:38:58 2011
-**      by: Qt User Interface Compiler version 4.2.1
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
-#ifndef EDITFILE_H
-#define EDITFILE_H
-
-#include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QGridLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QSpacerItem>
-#include <QtGui/QTextBrowser>
-#include <QtGui/QWidget>
-
-class Ui_EditFile
-{
-public:
-    QGridLayout *gridLayout;
-    QSpacerItem *spacerItem;
-    QGroupBox *GroupButtons;
-    QGridLayout *gridLayout1;
-    QPushButton *buttonPrint;
-    QPushButton *buttonQuit;
-    QSpacerItem *spacerItem1;
-    QTextBrowser *QTBEditFile;
-
-    void setupUi(QWidget *EditFile)
-    {
-    EditFile->setObjectName(QString::fromUtf8("EditFile"));
-    gridLayout = new QGridLayout(EditFile);
-    gridLayout->setSpacing(6);
-    gridLayout->setMargin(9);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    spacerItem = new QSpacerItem(331, 49, QSizePolicy::Expanding, QSizePolicy::Minimum);
-
-    gridLayout->addItem(spacerItem, 2, 1, 1, 1);
-
-    GroupButtons = new QGroupBox(EditFile);
-    GroupButtons->setObjectName(QString::fromUtf8("GroupButtons"));
-    gridLayout1 = new QGridLayout(GroupButtons);
-    gridLayout1->setSpacing(6);
-    gridLayout1->setMargin(9);
-    gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
-    buttonPrint = new QPushButton(GroupButtons);
-    buttonPrint->setObjectName(QString::fromUtf8("buttonPrint"));
-
-    gridLayout1->addWidget(buttonPrint, 0, 1, 1, 1);
-
-    buttonQuit = new QPushButton(GroupButtons);
-    buttonQuit->setObjectName(QString::fromUtf8("buttonQuit"));
-    buttonQuit->setAutoDefault(true);
-    buttonQuit->setDefault(true);
-    buttonQuit->setFlat(true);
-
-    gridLayout1->addWidget(buttonQuit, 0, 0, 1, 1);
-
-
-    gridLayout->addWidget(GroupButtons, 2, 0, 1, 1);
-
-    spacerItem1 = new QSpacerItem(20, 14, QSizePolicy::Minimum, QSizePolicy::Expanding);
-
-    gridLayout->addItem(spacerItem1, 1, 0, 1, 2);
-
-    QTBEditFile = new QTextBrowser(EditFile);
-    QTBEditFile->setObjectName(QString::fromUtf8("QTBEditFile"));
-    QTBEditFile->setMinimumSize(QSize(530, 800));
-    QFont font;
-    font.setFamily(QString::fromUtf8("Courier New"));
-    QTBEditFile->setFont(font);
-
-    gridLayout->addWidget(QTBEditFile, 0, 0, 1, 2);
-
-
-    retranslateUi(EditFile);
-
-    QSize size(675, 901);
-    size = size.expandedTo(EditFile->minimumSizeHint());
-    EditFile->resize(size);
-
-
-    QMetaObject::connectSlotsByName(EditFile);
-    } // setupUi
-
-    void retranslateUi(QWidget *EditFile)
-    {
-    EditFile->setWindowTitle(QApplication::translate("EditFile", "Edit a file", 0, QApplication::UnicodeUTF8));
-    GroupButtons->setTitle(QString());
-    buttonPrint->setText(QApplication::translate("EditFile", "Print", 0, QApplication::UnicodeUTF8));
-    buttonQuit->setText(QApplication::translate("EditFile", "Quit", 0, QApplication::UnicodeUTF8));
-    Q_UNUSED(EditFile);
-    } // retranslateUi
-
-};
-
-namespace Ui {
-    class EditFile: public Ui_EditFile {};
-} // namespace Ui
-
-#endif // EDITFILE_H
index 266c3d35f39a06ea24a1d9f43f6e280144b20e68..bfccdc17845de2a052d2aad5e98bb1474a9ce6f7 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>EditFile</class>
- <widget class="QWidget" name="EditFile" >
-  <property name="geometry" >
+ <widget class="QWidget" name="EditFile">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>901</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Edit a file</string>
   </property>
-  <layout class="QGridLayout" >
-   <property name="margin" >
+  <layout class="QGridLayout">
+   <property name="margin">
     <number>9</number>
    </property>
-   <property name="spacing" >
+   <property name="spacing">
     <number>6</number>
    </property>
-   <item row="2" column="1" >
+   <item row="2" column="1">
     <spacer>
-     <property name="orientation" >
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="sizeHint" >
+     <property name="sizeHint" stdset="0">
       <size>
        <width>331</width>
        <height>49</height>
      </property>
     </spacer>
    </item>
-   <item row="2" column="0" >
-    <widget class="QGroupBox" name="GroupButtons" >
-     <property name="title" >
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="GroupButtons">
+     <property name="title">
       <string/>
      </property>
-     <layout class="QGridLayout" >
-      <property name="margin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="spacing" >
+      <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="1" >
-       <widget class="QPushButton" name="buttonPrint" >
-        <property name="text" >
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonPrint">
+        <property name="text">
          <string>Print</string>
         </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+        <property name="default">
+         <bool>false</bool>
+        </property>
+        <property name="flat">
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="buttonQuit" >
-        <property name="text" >
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonQuit">
+        <property name="text">
          <string>Quit</string>
         </property>
-        <property name="autoDefault" >
-         <bool>true</bool>
+        <property name="autoDefault">
+         <bool>false</bool>
         </property>
-        <property name="default" >
+        <property name="default">
          <bool>true</bool>
         </property>
-        <property name="flat" >
-         <bool>true</bool>
+        <property name="flat">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item row="1" column="0" colspan="2" >
+   <item row="1" column="0" colspan="2">
     <spacer>
-     <property name="orientation" >
+     <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" >
+     <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
        <height>14</height>
      </property>
     </spacer>
    </item>
-   <item row="0" column="0" colspan="2" >
-    <widget class="QTextBrowser" name="QTBEditFile" >
-     <property name="minimumSize" >
+   <item row="0" column="0" colspan="2">
+    <widget class="QTextBrowser" name="QTBEditFile">
+     <property name="minimumSize">
       <size>
        <width>530</width>
        <height>800</height>
       </size>
      </property>
-     <property name="font" >
+     <property name="font">
       <font>
        <family>Courier New</family>
       </font>
index aa243a99089aa49f560b1f7e714b8534041a2e09..a2e40a95f2668f329fecebf5db377c16e6ab1c90 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 //
 
 //  File   : HOMARDGUI.cxx
-//  Author : Paul RASCLE, EDF
+//  Author : Gerald NICOLAS, EDF
 //  Module : HOMARD
 
-using namespace std;
 #include "HOMARDGUI.h"
 
 // SALOME Includes
@@ -40,7 +39,6 @@ using namespace std;
 #include "OB_Browser.h"
 
 #include "SALOME_ListIO.hxx"
-#include "SALOME_ListIteratorOfListIO.hxx"
 
 #include "SalomeApp_Application.h"
 #include "SalomeApp_DataModel.h"
@@ -59,13 +57,18 @@ using namespace std;
 #include <QMenu>
 #include "MonCreateCase.h"
 #include "MonCreateIteration.h"
-#include "MonEditFile.h"
+#include "MonPursueIteration.h"
+#include "MonCreateYACS.h"
+#include "MonEditBoundaryAn.h"
+#include "MonEditBoundaryDi.h"
 #include "MonEditCase.h"
-#include "MonEditIteration.h"
 #include "MonEditHypothesis.h"
+#include "MonEditIteration.h"
+#include "MonEditYACS.h"
 #include "MonEditZone.h"
-#include "MonEditBoundaryAn.h"
-#include "MonEditBoundaryDi.h"
+#include "MonMeshInfo.h"
+#include "MonIterInfo.h"
+#include "MonEditFile.h"
 #include "HomardQtCommun.h"
 
 // BOOST Includes
@@ -75,6 +78,8 @@ using namespace std;
 #include "SALOMEDS_Study.hxx"
 #include "HOMARDGUI_Utils.h"
 
+using namespace std;
+
 static CORBA::ORB_var _orb;
 
 //=======================================================================
@@ -82,12 +87,9 @@ static CORBA::ORB_var _orb;
 // purpose  : Constructor
 //=======================================================================
 HOMARDGUI::HOMARDGUI(const QString&) :
-           SalomeApp_Module( "HOMARD" ), // default name
-           LightApp_Module( "HOMARD" )
+           SalomeApp_Module( "HOMARD" ) // default name
 {
 }
-
-
 //=======================================================================
 // function : ~HOMARDGUI()
 // purpose  : Destructor
@@ -118,6 +120,7 @@ void HOMARDGUI::initialize( CAM_Application* app )
   anId = 0;
   createActions();
   createMenus();
+  recupPreferences();
 }
 
 //================================================
@@ -126,7 +129,7 @@ void HOMARDGUI::initialize( CAM_Application* app )
 //================================================
 void HOMARDGUI::createHOMARDAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
 {
-//   MESSAGE("HOMARDGUI::createHOMARDAction");
+//   MESSAGE("createHOMARDAction");
   QIcon icon;
   QWidget* parent = application()->desktop();
   SUIT_ResourceMgr* resMgr = application()->resourceMgr();
@@ -152,65 +155,199 @@ void HOMARDGUI::createHOMARDAction( const int id, const QString& po_id, const QS
 //================================================
 void HOMARDGUI::createActions(){
 //
-  createHOMARDAction( 1101, "NEW_CASE",       "cas_calcule.png"  );
-  createHOMARDAction( 1102, "NEW_ITERATION",  "iter_next.png"    );
-  createHOMARDAction( 1111, "COMPUTE",        "mesh_compute.png" );
-  createHOMARDAction( 1120, "EDIT_CASE",      "whatis.png"       );
-  createHOMARDAction( 1121, "EDIT_ITERATION", "whatis.png"       );
-  createHOMARDAction( 1122, "EDIT_HYPO",      "whatis.png"       );
-  createHOMARDAction( 1123, "EDIT_ZONE",      "whatis.png"       );
-  createHOMARDAction( 1124, "EDIT_BOUNDARY",  "whatis.png"       );
-  createHOMARDAction( 1130, "EDIT_MESS_FILE", "texte.png"        );
+  createHOMARDAction( 1101, "NEW_CASE",         "cas_calcule.png"        );
+  createHOMARDAction( 1102, "PURSUE_ITERATION", "iter_poursuite.png"     );
+  createHOMARDAction( 1103, "NEW_ITERATION",    "iter_next.png"          );
+  createHOMARDAction( 1111, "COMPUTE",          "mesh_compute.png"       );
+  createHOMARDAction( 1112, "COMPUTE_PUBLISH",  "mesh_compute.png"       );
+  createHOMARDAction( 1121, "MESH_INFO",        "advanced_mesh_info.png" );
+  createHOMARDAction( 1131, "MESH_PUBLICATION", "mesh_tree_mesh.png"     );
+//
+  createHOMARDAction( 1201, "EDIT",             "loop.png"         );
+  createHOMARDAction( 1211, "DELETE",           "delete.png"       );
+//
+  createHOMARDAction( 1301, "MESH_INFO",        "advanced_mesh_info.png" );
+  createHOMARDAction( 1302, "EDIT_MESS_FILE",   "texte.png"              );
+//
+  createHOMARDAction( 1401, "YACS",             "table_view.png" );
 //
 }
 
 //================================================
 // function : createPreferences
-// No preferences for Homard
-// Just a test
 //================================================
-void HOMARDGUI::createPreferences(){
-   QString toto = tr( "PREF_GROUP_GENERAL" );
-   int tabId  = addPreference( tr( "PREF_GROUP_GENERAL" ) );
-   int genGroup = addPreference( tr( "PREF_TAB_SETTINGS" ), tabId );
-   addPreference( tr( "PREF_TEST" ), genGroup, LightApp_Preferences::Color, "Homard", "shading_color" );
+void HOMARDGUI::createPreferences()
+{
+  MESSAGE("createPreferences")
+
+  int Onglet, Bloc, Pref ;
+  // 1. Generalites
+  Onglet = addPreference( tr( "PREF_TAB_GENERAL" ) );
+//   Onglet = addPreference( tr( "PREF_TAB_SETTINGS" ) ) ;
+
+  Bloc = addPreference( tr( "PREF_PUBLICATION" ), Onglet );
+  setPreferenceProperty( Bloc, "columns", 1 );
+
+  Pref = addPreference( tr( "PREF_PUBLICATION_MAILLAGE_IN" ), Bloc, LightApp_Preferences::Bool, "HOMARD", "publish_mesh_in" );
+
+  Pref = addPreference( tr( "PREF_PUBLICATION_MAILLAGE_OUT" ), Bloc, LightApp_Preferences::Bool, "HOMARD", "publish_mesh_out" );
+
+  // 2. YACS
+  Onglet = addPreference( tr( "PREF_YACS" ) ) ;
+
+  Bloc = addPreference( tr( "PREF_YACS_MAX" ), Onglet );
+  setPreferenceProperty( Bloc, "columns", 1 );
+
+  Pref = addPreference( tr( "PREF_YACS_MAX_ITER" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_iter" );
+  setPreferenceProperty( Pref, "min",  0 );
+  setPreferenceProperty( Pref, "max",  100000000 );
+  setPreferenceProperty( Pref, "step", 1 );
+
+  Pref = addPreference( tr( "PREF_YACS_MAX_NODE" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_node" );
+  setPreferenceProperty( Pref, "min",  0 );
+  setPreferenceProperty( Pref, "max",  100000000 );
+  setPreferenceProperty( Pref, "step", 1000 );
+
+  Pref = addPreference( tr( "PREF_YACS_MAX_ELEM" ), Bloc, LightApp_Preferences::IntSpin, "HOMARD", "yacs_max_elem" );
+  setPreferenceProperty( Pref, "min",  0 );
+  setPreferenceProperty( Pref, "max",  100000000 );
+  setPreferenceProperty( Pref, "step", 1000 );
+
+  Bloc = addPreference( tr( "PREF_YACS_CONVERGENCE" ), Onglet );
+  setPreferenceProperty( Bloc, "columns", 1 );
+
+  Pref = addPreference( tr( "PREF_YACS_TYPE_TEST" ), Bloc, LightApp_Preferences::Selector, "HOMARD", "yacs_type_test" );
+  QStringList aListOfTypeTest;
+  aListOfTypeTest << "None";
+  aListOfTypeTest << "VTest > VRef";
+  aListOfTypeTest << "VTest < VRef";
+  setPreferenceProperty( Pref, "strings", aListOfTypeTest );
 }
 
 
 //================================================
 // function : createMenus
-//                Verifier l'avant dernier nombre passe en parametre
 //================================================
-void HOMARDGUI::createMenus(){
-  MESSAGE("HOMARDGUI::createMenus")
-  int HOMARD_Id  = createMenu( tr( "HOMARD" ),  -1,  5, 10 );
+void HOMARDGUI::createMenus()
+{
+  MESSAGE("createMenus")
+//
+  int HOMARD_Id  = createMenu( tr( "HOM_MEN_HOMARD" ),  -1,  5, 10 );
   createMenu( 1101, HOMARD_Id, -1 ); //Create_Case
-  createMenu( 1102, HOMARD_Id, -1 ); //Create_Iteration
-  createMenu( 1111, HOMARD_Id, -1 ); //COMPUTE
+  createMenu( 1102, HOMARD_Id, -1 ); //Pursue_Iteration
+  createMenu( separator(), HOMARD_Id,-1);
+  createMenu( 1103, HOMARD_Id, -1 ); //Create_Iteration
+  createMenu( 1111, HOMARD_Id, -1 ); //Compute
+  createMenu( 1112, HOMARD_Id, -1 ); //Compute and publish
+//
+  HOMARD_Id  = createMenu( tr( "HOM_MEN_MODIFICATION" ),  -1,  5, 10 );
+  createMenu( 1201, HOMARD_Id, -1 ); //Edit
+  createMenu( 1211, HOMARD_Id, -1 ); //Delete
+//
+  HOMARD_Id  = createMenu( tr( "HOM_MEN_INFORMATION" ),  -1,  5, 10 );
+  createMenu( 1301, HOMARD_Id, -1 ); //Information sur un maillage
+  createMenu( 1131, HOMARD_Id, -1 ); //Mesh publication
   createMenu( separator(), HOMARD_Id,-1);
-  createMenu( 1120, HOMARD_Id, -1 ); //Edit_Case
-  createMenu( 1121, HOMARD_Id, -1 ); //Edit_Iteration
-  createMenu( 1122, HOMARD_Id, -1 ); //Edit Hypo
-  createMenu( 1123, HOMARD_Id, -1 ); //Edit_Zone
-  createMenu( 1124, HOMARD_Id, -1 ); //Edit_Boundary
+  createMenu( 1302, HOMARD_Id, -1 ); //EditAsciiFile pour le fichier listeStd ou bilan
+  createMenu( separator(), HOMARD_Id,-1);
+  createMenu( 1201, HOMARD_Id, -1 ); //Edit
+  createMenu( separator(), HOMARD_Id,-1);
+//
+  HOMARD_Id  = createMenu( tr( "HOM_MEN_YACS" ),  -1,  5, 10 );
+  createMenu( 1401, HOMARD_Id, -1 ); // Création d'un schéma YACS
   createMenu( separator(), HOMARD_Id,-1);
-  createMenu( 1130, HOMARD_Id, -1 ); //EditAsciiFile pour le fichier listeStd ou bilan
+}
+
+//================================================
+// function : recupPreferences
+// Pour chaque valeur, le defaut est la valeur definie dans HOMARD_Gen
+// . Si la recuperation dans config/salome s'est bien passee a la creation de HOMARD_Gen,
+//   ces valeurs sont les valeurs definies.
+// . Si cela ne s'est pas bien passe, ce sont les valeurs par defaut de HOMARD_Gen
+//================================================
+void HOMARDGUI::recupPreferences()
+{
+  MESSAGE("recupPreferences")
+//
+// A. Declarations
+//
+  SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( application() );
+  HOMARD::HOMARD_Gen_var homardGen = HOMARDGUI::InitHOMARDGen(app);
+  int defaut_i ;
+  std::string defaut_s ;
+  QString QString_v ;
+//
+// B. Les valeurs
+// B.1. La langue
+//
+  defaut_s = homardGen->GetLanguageShort();
+  SUIT_ResourceMgr* resMgr = getApp()->resourceMgr();
+  _LanguageShort = resMgr->stringValue("language", "language", QString(defaut_s.c_str()) );
+//
+// B.2. Les publications
+  bool publish_mesh ;
+//
+  _PublisMeshIN = homardGen->GetPublisMeshIN();
+  if ( _PublisMeshIN == 1 ) { publish_mesh = true ;  }
+  else                      { publish_mesh = false ; }
+  publish_mesh = resMgr->booleanValue("HOMARD", "publish_mesh_in", publish_mesh );
+  if ( publish_mesh ) { _PublisMeshIN = 1 ; }
+  else                { _PublisMeshIN = 0 ; }
+//
+  _PublisMeshOUT = homardGen->GetPublisMeshOUT();
+  if ( _PublisMeshOUT == 1 ) { publish_mesh = true ;  }
+  else                       { publish_mesh = false ; }
+  publish_mesh = resMgr->booleanValue("HOMARD", "publish_mesh_out", publish_mesh );
+  if ( publish_mesh ) { _PublisMeshOUT = 1 ; }
+  else                { _PublisMeshOUT = 0 ; }
+//
+// B.3. Les maximum pour YACS
+//
+  defaut_i = homardGen->GetYACSMaxIter();
+  _YACSMaxIter = resMgr->integerValue("HOMARD", "yacs_max_iter", defaut_i );
+//
+  defaut_i = homardGen->GetYACSMaxNode();
+  _YACSMaxNode = resMgr->integerValue("HOMARD", "yacs_max_node", defaut_i );
+//
+  defaut_i = homardGen->GetYACSMaxElem();
+  _YACSMaxElem = resMgr->integerValue("HOMARD", "yacs_max_elem", defaut_i );
+//
+// B.4. La convergence pour YACS
+//
+  defaut_i = homardGen->GetYACSConvergenceType();
+  if ( defaut_i == 1 )      { QString_v = tr("VTest > VRef") ; }
+  else if ( defaut_i == 2 ) { QString_v = tr("VTest < VRef") ; }
+  else                      { QString_v = tr("None") ; }
+  QString_v = resMgr->stringValue ( "HOMARD", "yacs_type_test", QString_v );
+  if ( ( QString_v == "VTest > VRef" ) || ( QString_v == "VTest &gt; VRef" ) )      { _YACSTypeTest = 1 ; }
+  else if ( ( QString_v == "VTest < VRef" ) || ( QString_v == "VTest &lt; VRef" ) ) { _YACSTypeTest = 2 ; }
+  else                                                                              { _YACSTypeTest = 0 ; }
+//
+// C. Enregistrement dans l'objet general
+//
+  MESSAGE ("Enregistrement de LanguageShort = " << _LanguageShort.toStdString().c_str() );
+  MESSAGE ("Enregistrement de PublisMeshIN = " << _PublisMeshIN<<", PublisMeshOUT = "<< _PublisMeshOUT);
+  MESSAGE ("Enregistrement de YACSMaxIter = " << _YACSMaxIter<<", YACSMaxNode = "<< _YACSMaxNode<<", YACSMaxElem = "<< _YACSMaxElem);
+  MESSAGE ("Enregistrement de YACSTypeTest = " << _YACSTypeTest);
+//
+  homardGen->SetLanguageShort(_LanguageShort.toStdString().c_str());
+  homardGen->SetPublisMesh(_PublisMeshIN, _PublisMeshOUT);
+  homardGen->SetYACSMaximum(_YACSMaxIter, _YACSMaxNode, _YACSMaxElem);
+//
+  homardGen->SetYACSConvergenceType(_YACSTypeTest);
 }
 
 //================================================
 void HOMARDGUI::OnGUIEvent()
 //================================================
 {
-  MESSAGE("HOMARDGUI::OnGUIEvent()")
+  MESSAGE("OnGUIEvent()")
   setOrb();
   const QObject* obj = sender();
-  if ( !obj || !obj->inherits( "QAction" ) )
-       return;
+  if ( !obj || !obj->inherits( "QAction" ) ) { return; }
   int id = actionId((QAction*)obj);
-  bool ret;
-  if ( id != -1 )
-      ret = OnGUIEvent( id );
-  MESSAGE("************** End of HOMARDGUI::OnGUIEvent()");
+  if ( id != -1 ) { bool ret = OnGUIEvent( id ); }
+  MESSAGE("Fin de OnGUIEvent()");
 }
 
 //=======================================================================
@@ -218,12 +355,14 @@ void HOMARDGUI::OnGUIEvent()
 //=======================================================================
 bool HOMARDGUI::OnGUIEvent (int theCommandID)
 {
-  MESSAGE("HOMARDGUI::OnGUIEvent(int)");
+  MESSAGE("OnGUIEvent avec theCommandID = "<<theCommandID);
+// A. Controles
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( application() );
   if ( !app ) return false;
 
   SalomeApp_Study* stud = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
-  if ( !stud ) {
+  if ( !stud )
+  {
     MESSAGE ( "FAILED to cast active study to SalomeApp_Study" );
     return false;
   }
@@ -243,124 +382,277 @@ bool HOMARDGUI::OnGUIEvent (int theCommandID)
    }
   getApp()->updateObjectBrowser();
 
+// B. Choix selon les commandes
   SCRUTE(theCommandID);
   switch (theCommandID)
   {
     case 1101: // Creation d un Cas
     {
-      MESSAGE("etape 1101")
       MESSAGE("command " << theCommandID << " activated");
-      MonCreateCase *aDlg = new MonCreateCase( parent, TRUE,
+      MonCreateCase *aDlg = new MonCreateCase( true,
                             HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
       aDlg->show();
       break;
     }
 
-    case 1102: // Creation d une Iteration
+    case 1102: // Poursuite d une iteration
     {
       MESSAGE("command " << theCommandID << " activated");
-      QString IterParentName=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 0);
-      MESSAGE("IterParentName " << IterParentName.toStdString().c_str() << " choisi dans arbre");
+      MonPursueIteration *aDlg = new MonPursueIteration( true,
+                                HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
+      aDlg->show();
+      break;
+    }
+
+    case 1103: // Creation d une Iteration
+    {
+      MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
       MonCreateIteration *IterDlg = new MonCreateIteration( parent, true,
-                                     HOMARD::HOMARD_Gen::_duplicate(homardGen), IterParentName ) ;
+                                     HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
       IterDlg->show();
       break;
     }
 
-    case 1111: // Compute une Iteration
+    case 1111: // Compute une iteration
     {
-      MESSAGE("command " << theCommandID << " activated");
-      QString monIter=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("IterationHomard"), 1);
-      if (monIter == QString("")) break;
-      try
-      {
-        homardGen->Compute(monIter.toStdString().c_str(), 0);
-      }
+      MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
+      try { homardGen->Compute(_ObjectName.toStdString().c_str(), 0, 1, -1, 1); }
       catch( SALOME::SALOME_Exception& S_ex )
       {
         QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                  QString(CORBA::string_dup(S_ex.details.text)) );
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
         getApp()->updateObjectBrowser();
         return false;
       }
       break;
     }
 
-    case 1120: // Edition d un cas
+    case 1112: // Compute une iteration et publication
     {
       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
-      _PTR(SObject) obj = chercheMonObjet();
-      if ((obj) and (HOMARD_UTILS::isCase(obj)))
+      try { homardGen->Compute(_ObjectName.toStdString().c_str(), 0, 1, -1, 2); }
+      catch( SALOME::SALOME_Exception& S_ex )
       {
-          MonEditCase *aDlg = new MonEditCase(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
-          aDlg->show();
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        getApp()->updateObjectBrowser();
+        return false;
       }
+      break;
     }
 
-    case 1121: // Edition d une iteration
+    case 1121: // Information sur le maillage de l'iteration
     {
       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
-      _PTR(SObject) obj = chercheMonObjet();
-      if ((obj) and (HOMARD_UTILS::isIter(obj)))
-      {
-          MonEditIteration *aDlg = new MonEditIteration(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
-          aDlg->show();
-      }
+      MonIterInfo *IterDlg = new MonIterInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
+      IterDlg->show();
+      break;
     }
 
-    case 1122: // Edition d une hypothese
+    case 1131: // Publication du maillage de l'iteration
     {
       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
-      _PTR(SObject) obj = chercheMonObjet();
-      if ((obj) and (HOMARD_UTILS::isHypo(obj)))
-      {
-          MonEditHypothesis *aDlg = new MonEditHypothesis(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen),  _ObjectName, QString(""), QString("")) ;
-          aDlg->show();
-      }
+      homardGen->PublishMeshIterInSmesh(_ObjectName.toStdString().c_str());
+      break;
     }
 
-    case 1123: // Edition d une zone
+    case 1132: // Publication du maillage de l'iteration a partir du fichier
     {
       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
+      homardGen->PublishResultInSmesh(_ObjectName.toStdString().c_str(), 1);
+      break;
+    }
+
+    case 1201: // Edition d'un objet
+    {
+      MESSAGE("command " << theCommandID << " activated");
+      QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
+      if (nomObjet == QString("")) break;
       _PTR(SObject) obj = chercheMonObjet();
-      if ((obj) and (HOMARD_UTILS::isZone(obj)))
+      if (obj)
       {
-          MonEditZone *aDlg = new MonEditZone(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
+        // Edition d'une frontiere discrete
+        if (HOMARD_UTILS::isBoundaryDi(obj))
+        {
+          MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
           aDlg->show();
+        }
+        // Edition d'une frontiere analytique
+        else if (HOMARD_UTILS::isBoundaryAn(obj))
+        {
+          MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
+          aDlg->show();
+        }
+        // Edition d'un cas
+        else if (HOMARD_UTILS::isCase(obj))
+        {
+          MonEditCase *aDlg = new MonEditCase(true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
+          aDlg->show();
+        }
+        // Edition d'une hypothese
+        else if (HOMARD_UTILS::isHypo(obj))
+        {
+          MonEditHypothesis *aDlg = new MonEditHypothesis(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen),  _ObjectName, QString(""), QString("")) ;
+          aDlg->show();
+        }
+        // Edition d'une iteration
+        else if (HOMARD_UTILS::isIter(obj))
+        {
+          MonEditIteration *aDlg = new MonEditIteration(parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
+          aDlg->show();
+        }
+        // Edition d'un schema YACS
+        else if (HOMARD_UTILS::isYACS(obj))
+        {
+          MESSAGE("appel de MonEditYACS");
+          MonEditYACS *aDlg = new MonEditYACS(true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName) ;
+          aDlg->show();
+        }
+        // Edition d'une zone
+        else if (HOMARD_UTILS::isZone(obj))
+        {
+          MonEditZone *aDlg = new MonEditZone(0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
+          aDlg->show();
+        }
       }
+      break;
     }
 
-    case 1124: // Edition d une frontiere
+    case 1211: // Suppression d'un objet
     {
-      MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
+      MESSAGE("command " << theCommandID << " activated");
+      QString nomObjet = HOMARD_QT_COMMUN::SelectionArbreEtude(QString(""), 1);
+      if (nomObjet == QString("")) break;
       _PTR(SObject) obj = chercheMonObjet();
-      if ((obj))
+      if (obj)
       {
-          if (HOMARD_UTILS::isBoundaryDi(obj))
+        // Suppression d'une frontiere
+        if ( HOMARD_UTILS::isBoundaryDi(obj) || HOMARD_UTILS::isBoundaryAn(obj) )
+        {
+          try
+          { homardGen->DeleteBoundary(_ObjectName.toStdString().c_str()); }
+          catch( SALOME::SALOME_Exception& S_ex )
           {
-              MESSAGE(".. Lancement de MonEditBoundaryDi" );
-              MonEditBoundaryDi *aDlg = new MonEditBoundaryDi(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
-              aDlg->show();
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
           }
-          if (HOMARD_UTILS::isBoundaryAn(obj))
+        }
+        // Suppression d'un cas
+        else if (HOMARD_UTILS::isCase(obj))
+        {
+          try
+          { homardGen->DeleteCase(_ObjectName.toStdString().c_str(), 1); }
+          catch( SALOME::SALOME_Exception& S_ex )
           {
-              MESSAGE(".. Lancement de MonEditBoundaryAn" );
-              MonEditBoundaryAn *aDlg = new MonEditBoundaryAn(0, TRUE, HOMARD::HOMARD_Gen::_duplicate(homardGen), QString(""), _ObjectName ) ;
-              aDlg->show();
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
           }
+        }
+        // Suppression d'une hypothese
+        else if (HOMARD_UTILS::isHypo(obj))
+        {
+          try
+          { homardGen->DeleteHypo(_ObjectName.toStdString().c_str()); }
+          catch( SALOME::SALOME_Exception& S_ex )
+          {
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
+          }
+        }
+        // Suppression d'une iteration
+        else if (HOMARD_UTILS::isIter(obj))
+        {
+          try
+          { homardGen->DeleteIteration(_ObjectName.toStdString().c_str(), 1); }
+          catch( SALOME::SALOME_Exception& S_ex )
+          {
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
+          }
+        }
+        // Suppression d'un schema YACS
+        else if (HOMARD_UTILS::isYACS(obj))
+        {
+          try
+          { homardGen->DeleteYACS(_ObjectName.toStdString().c_str(), 1); }
+          catch( SALOME::SALOME_Exception& S_ex )
+          {
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
+          }
+        }
+        // Suppression d'une zone
+        else if (HOMARD_UTILS::isZone(obj))
+        {
+          try
+          { homardGen->DeleteZone(_ObjectName.toStdString().c_str()); }
+          catch( SALOME::SALOME_Exception& S_ex )
+          {
+            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                      QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+            getApp()->updateObjectBrowser();
+            return false;
+          }
+        }
       }
+      break;
     }
 
-    case 1130: // Edition du fichier mess
+    case 1301: // Information sur un maillage
+    {
+      MESSAGE("etape 1301")
+      MESSAGE("command " << theCommandID << " activated");
+      MonMeshInfo *aDlg = new MonMeshInfo( parent, true, HOMARD::HOMARD_Gen::_duplicate(homardGen) ) ;
+      aDlg->show();
+      break;
+    }
+
+    case 1302: // Affichage de fichier texte
     {
       MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
       _PTR(SObject) obj = chercheMonObjet();
-      if ((obj) and ((HOMARD_UTILS::isFileMess(obj) or HOMARD_UTILS::isFileSummary(obj))))
+      if ( (obj) && ( HOMARD_UTILS::isFileType(obj,QString("log")) || HOMARD_UTILS::isFileType(obj,QString("Summary")) || HOMARD_UTILS::isFileType(obj,QString("xml")) ) )
       {
-          MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
-          aDlg->show();
+          MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName, 0 ) ;
+          if ( aDlg->_codret == 0 ) { aDlg->show(); }
       }
-     }
+      break;
+    }
+
+    case 1401: // Création d'un schema YACS
+    {
+      MESSAGE("etape 1401")
+      MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
+      MonCreateYACS *aDlg = new MonCreateYACS( true, HOMARD::HOMARD_Gen::_duplicate(homardGen), _ObjectName ) ;
+      aDlg->show();
+      break;
+    }
+
+    case 1402: // Ecriture d'un schéma YACS
+    {
+      MESSAGE("etape 1402")
+      MESSAGE("command " << theCommandID << " activated avec objet " << _ObjectName.toStdString().c_str() );
+      try { homardGen->YACSWrite(_ObjectName.toStdString().c_str()); }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        getApp()->updateObjectBrowser();
+        return false;
+      }
+      break;
+    }
+
   }
   getApp()->updateObjectBrowser();
   return true;
@@ -412,7 +704,9 @@ void HOMARDGUI::windows( QMap<int, int>& theMap ) const
 {
   theMap.clear();
   theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
+#ifndef DISABLE_PYCONSOLE
   theMap.insert( SalomeApp_Application::WT_PyConsole,     Qt::BottomDockWidgetArea );
+#endif
 }
 
 //=============================================================================
@@ -436,116 +730,166 @@ void HOMARDGUI::setOrb()
 _PTR(SObject) HOMARDGUI::chercheMonObjet()
 //========================================
 {
-
-    SALOMEDSClient_SObject* aSO = NULL;
-    _PTR(SObject) obj;
-    SALOME_ListIO lst;
-    getApp()->selectionMgr()->selectedObjects( lst );
-    if (  lst.Extent() == 1 )
-    {
-       Handle(SALOME_InteractiveObject) io = lst.First();
-       SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
-       _PTR(Study) study = appStudy->studyDS();
-       _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
-       _ObjectName = QString( obj->GetName().c_str() );
-        return obj;
-     }
-     else
-         return _PTR(SObject)(aSO);
+  SALOMEDSClient_SObject* aSO = NULL;
+  _PTR(SObject) obj;
+  SALOME_ListIO lst;
+  getApp()->selectionMgr()->selectedObjects( lst );
+  if (  lst.Extent() == 1 )
+  {
+    Handle(SALOME_InteractiveObject) io = lst.First();
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
+    _PTR(Study) study = appStudy->studyDS();
+    _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
+    _ObjectName = QString( obj->GetName().c_str() );
+    return obj;
+  }
+  else { return _PTR(SObject)(aSO); }
 }
 //=============================================================================
 void HOMARDGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
 //=============================================================================
 {
-  MESSAGE("Debut de HOMARDGUI::contextMenuPopup");
+  MESSAGE("Debut de contextMenuPopup");
   _PTR(SObject) obj = chercheMonObjet();
   if ( obj )
   {
     title = QString( obj->GetName().c_str() );
     _ObjectName = title;
     SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+//
+    QPixmap pix ;
+    bool DeleteObject = false ;
+    bool EditObject = false ;
 //
     if ( HOMARD_UTILS::isBoundaryAn(obj) )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_BOUNDARY").toLatin1().data()), this,SLOT(EditBoDi()));
+      EditObject = true ;
+      DeleteObject = true ;
     }
     else if ( HOMARD_UTILS::isBoundaryDi(obj) )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_BOUNDARY").toLatin1().data()), this,SLOT(EditBoDi()));
+      EditObject = true ;
+      DeleteObject = true ;
     }
-    else if ( HOMARD_UTILS::isZone(obj) )
+    else if ( HOMARD_UTILS::isCase(obj) )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_ZONE").toLatin1().data()), this,SLOT(EditZone()));
+      pix = resMgr->loadPixmap( "HOMARD", "table_view.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_YACS").toLatin1().data()), this, SLOT(YACSCreate()));
+      EditObject = true ;
+      DeleteObject = true ;
     }
     else if ( HOMARD_UTILS::isHypo(obj) )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_HYPO").toLatin1().data()), this,SLOT(EditHypo()));
+      EditObject = true ;
+      DeleteObject = true ;
     }
     else if ( HOMARD_UTILS::isIter(obj) )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "iter_next.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_NEW_ITERATION").toLatin1().data()), this,SLOT(NextIter()));
-      QPixmap pix1 = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix1), tr(QString("HOM_MEN_EDIT_ITERATION").toLatin1().data()), this,SLOT(EditIter()));
-      QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
-      menu->addAction(QIcon(pix2), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this,SLOT(LanceCalcul()));
+      pix = resMgr->loadPixmap( "HOMARD", "iter_next.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_NEW_ITERATION").toLatin1().data()), this, SLOT(NextIter()));
+      pix = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_COMPUTE").toLatin1().data()), this, SLOT(LanceCalcul0()));
+      pix = resMgr->loadPixmap( "HOMARD", "mesh_compute.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_COMPUTE_PUBLISH").toLatin1().data()), this, SLOT(LanceCalcul1()));
+      pix = resMgr->loadPixmap( "HOMARD", "advanced_mesh_info.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_INFO").toLatin1().data()), this, SLOT(IterInfo()));
+      pix = resMgr->loadPixmap( "HOMARD", "mesh_tree_mesh.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_PUBLICATION").toLatin1().data()), this, SLOT(MeshPublish0()));
+      EditObject = true ;
+      DeleteObject = true ;
     }
-    else if ( HOMARD_UTILS::isCase(obj) )
+    else if ( HOMARD_UTILS::isYACS(obj) )
+    {
+      pix = resMgr->loadPixmap( "HOMARD", "write.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_WRITE").toLatin1().data()), this, SLOT(YACSWrite()));
+      EditObject = true ;
+      DeleteObject = true ;
+    }
+    else if ( HOMARD_UTILS::isZone(obj) )
+    {
+      EditObject = true ;
+      DeleteObject = true ;
+    }
+    else if ( HOMARD_UTILS::isFileType(obj,QString("log")) || HOMARD_UTILS::isFileType(obj,QString("Summary")) || HOMARD_UTILS::isFileType(obj,QString("xml")) )
+    {
+      pix = resMgr->loadPixmap( "HOMARD", "texte.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_MESS_FILE").toLatin1().data()), this, SLOT(EditAsciiFile()));
+    }
+    else if ( HOMARD_UTILS::isFileType(obj,QString("Mesh")) )
+    {
+      pix = resMgr->loadPixmap( "HOMARD", "mesh_tree_mesh.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_MESH_PUBLICATION").toLatin1().data()), this, SLOT(MeshPublish1()));
+    }
+//  Ajout d'un menu d'edition pour les objets qui le proposent
+    if ( EditObject )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "whatis.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_CASE").toLatin1().data()), this,SLOT(EditCase()));
+      pix = resMgr->loadPixmap( "HOMARD", "loop.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT").toLatin1().data()), this, SLOT(Edit()));
     }
-    else if ( HOMARD_UTILS::isFileMess(obj) or HOMARD_UTILS::isFileSummary(obj) )
+//  Ajout d'un menu de destruction pour les objets qui le proposent
+    if ( DeleteObject )
     {
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "texte.png" );
-      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_EDIT_MESS_FILE").toLatin1().data()), this,SLOT(EditAsciiFile()));
+      pix = resMgr->loadPixmap( "HOMARD", "delete.png" );
+      menu->addAction(QIcon(pix), tr(QString("HOM_MEN_DELETE").toLatin1().data()), this, SLOT(Delete()));
     }
   }
 }
 
 void HOMARDGUI::NextIter()
 {
-  this->OnGUIEvent(1102);
+  this->OnGUIEvent(1103);
 }
 
-void HOMARDGUI::LanceCalcul()
+void HOMARDGUI::LanceCalcul0()
 {
   this->OnGUIEvent(1111);
 }
 
-void HOMARDGUI::EditCase()
+void HOMARDGUI::LanceCalcul1()
 {
-  this->OnGUIEvent(1120);
+  this->OnGUIEvent(1112);
 }
 
-void HOMARDGUI::EditIter()
+void HOMARDGUI::IterInfo()
 {
   this->OnGUIEvent(1121);
 }
 
-void HOMARDGUI::EditHypo()
+void HOMARDGUI::MeshPublish0()
 {
-  this->OnGUIEvent(1122);
+  this->OnGUIEvent(1131);
 }
 
-void HOMARDGUI::EditZone()
+void HOMARDGUI::MeshPublish1()
 {
-  this->OnGUIEvent(1123);
+  this->OnGUIEvent(1132);
 }
 
-void HOMARDGUI::EditBoDi()
+void HOMARDGUI::Edit()
 {
-  this->OnGUIEvent(1124);
+  this->OnGUIEvent(1201);
+}
+
+void HOMARDGUI::Delete()
+{
+  this->OnGUIEvent(1211);
 }
 
 void HOMARDGUI::EditAsciiFile()
 {
-  this->OnGUIEvent(1130);
+  this->OnGUIEvent(1302);
+}
+
+void HOMARDGUI::YACSCreate()
+{
+  this->OnGUIEvent(1401);
+}
+void HOMARDGUI::YACSWrite()
+{
+  this->OnGUIEvent(1402);
 }
+
+
 //
 //=============================================================================
 // Export the module
index 6db12449d7d9074ff05acad1fdb8257177293ef9..a2acb26a16182990711b04a5555880e785e65ad7 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  HOMARDGUI : HOMARD component GUI implemetation 
+//  HOMARDGUI : HOMARD component GUI implemetation
 //
 
 #ifndef _HOMARDGUI_H_
 #define _HOMARDGUI_H_
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SalomeApp_Module.h>
 #include "SalomeApp_Study.h"
 
 #include CORBA_CLIENT_HEADER(HOMARD_Cas)
 #include CORBA_CLIENT_HEADER(HOMARD_Hypothesis)
 
-#include <QtCore/QString>
+#include <QString>
 
 class SalomeApp_Application;
 
-class HOMARDGUI: public SalomeApp_Module 
+class HOMARD_EXPORT HOMARDGUI: public SalomeApp_Module
 {
   Q_OBJECT
 
@@ -61,15 +63,17 @@ public slots:
 
 private slots:
     void OnGUIEvent();
-    void EditBoDi();
-    void EditZone();
-    void EditHypo();
-    void EditIter();
-    void EditCase();
     void EditAsciiFile();
-    void LanceCalcul();
+    void LanceCalcul0();
+    void LanceCalcul1();
+    void IterInfo();
     void NextIter();
-    void XmGraceFichier();
+    void MeshPublish0();
+    void MeshPublish1();
+    void YACSCreate();
+    void YACSWrite();
+    void Edit();
+    void Delete();
 
 public:
    virtual void  contextMenuPopup( const QString&, QMenu*, QString& );
@@ -80,6 +84,7 @@ private:
                             const int key = 0, const bool toggle = false );
    void createActions();
    void createMenus();
+   void recupPreferences();
    void createPopupMenus();
    _PTR(SObject)  chercheMonObjet();
 
@@ -89,6 +94,13 @@ private:
 
    int anId;
    QString _ObjectName;
+   QString _LanguageShort ;
+   int _PublisMeshIN ;
+   int _PublisMeshOUT ;
+   int _YACSMaxIter ;
+   int _YACSMaxNode ;
+   int _YACSMaxElem ;
+   int _YACSTypeTest ;
 };
 
 #endif
diff --git a/src/HOMARDGUI/HOMARDGUI_Exports.hxx b/src/HOMARDGUI/HOMARDGUI_Exports.hxx
new file mode 100755 (executable)
index 0000000..8263452
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _HOMARDGUI_EXPORTS_H_
+#define _HOMARDGUI_EXPORTS_H_
+
+#ifdef WIN32
+  #if defined HOMARD_EXPORTS || defined Homard_EXPORTS
+    #define HOMARD_EXPORT __declspec( dllexport )
+  #else
+    #define HOMARD_EXPORT __declspec( dllimport )
+  #endif
+#else
+   #define HOMARD_EXPORT
+#endif
+
+
+#endif //_HOMARDGUI_EXPORTS_H_
+
index 91e4721048ecc52caffce95e60f5ca4d44b351ba..3b8b4ac03a1bbd0f6cd9dd2cfec07a67294d8c0a 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -32,7 +32,6 @@
 #include "SalomeApp_Study.h"
 
 #include "SALOME_ListIO.hxx"
-#include "SALOME_ListIteratorOfListIO.hxx"
 
 #include "SALOMEconfig.h"
 #include "utilities.h"
@@ -43,7 +42,9 @@
 #include <qstring.h>
 #include <qstringlist.h>
 #include <sys/stat.h>
+#ifndef WIN32
 #include <dirent.h>
+#endif
 
 SALOME_ListIO HOMARD_UTILS::mySelected;
 
@@ -56,7 +57,6 @@ SALOME_ListIO HOMARD_UTILS::mySelected;
     return theStudy->studyDS();
 }
 
-
 //================================================================
 // Function : GetActiveStudy
 // Returne un pointeur sur l'etude active
@@ -116,11 +116,10 @@ const SALOME_ListIO& HOMARD_UTILS::selectedIO()
       if( aSelectionMgr )
       {
              aSelectionMgr->selectedObjects( mySelected );
-              for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next())
-                SCRUTE(it.Value()->getEntry());
+        for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next())
+        SCRUTE(it.Value()->getEntry());
       };
       return mySelected;
-
 }
 
 //================================================================
@@ -135,7 +134,7 @@ int HOMARD_UTILS::IObjectCount()
       {
              aSelectionMgr->selectedObjects( mySelected );
              SCRUTE(mySelected.Extent());
-              return mySelected.Extent();
+        return mySelected.Extent();
       }
       return 0;
 }
@@ -161,20 +160,7 @@ Handle(SALOME_InteractiveObject) HOMARD_UTILS::lastIObject()
 }
 
 //================================================================
-// Function : isXmgrace
-// Retourne vrai si le fichier associe est de type ASCII
-//================================================================
-bool HOMARD_UTILS::isXmgrace(_PTR(SObject) MonObj)
-{
-   _PTR(GenericAttribute) anAttr;
-   if (!MonObj->FindAttribute(anAttr, "AttributeComment")) return false;
-   _PTR(AttributeComment) aFileComment (anAttr);
-   std::string Type = aFileComment->Value();
-   if (QString(Type.c_str()) == QString("HomardOuputQual")) return true;
-   return false;
-}
-//================================================================
-// Retourne vrai si l objet est du type voulu
+// Retourne vrai si l'objet est du type voulu
 // . Dans le cas d'un cas, d'une hypothese, d'une zone, on se contente
 // d'une comparaison simple entre le type stocke et TypeObject.
 // . Pour l'iteration, le type stocke en attribut est sous la forme
@@ -201,6 +187,7 @@ bool HOMARD_UTILS::isObject(_PTR(SObject) MonObj, QString TypeObject, int option
   if ( option == 0 )
   {
     int position = Type.lastIndexOf(TypeObject);
+//     MESSAGE("position = "<<position);
     if ( position == 0 ) { bOK = true ; }
   }
   else
@@ -210,70 +197,86 @@ bool HOMARD_UTILS::isObject(_PTR(SObject) MonObj, QString TypeObject, int option
   return bOK ;
 }
 //================================================================
-// Retourne vrai si l objet est une frontiere analytique
+// Retourne vrai si l'objet est une frontiere analytique
 //================================================================
 bool HOMARD_UTILS::isBoundaryAn(_PTR(SObject) MonObj)
 {
    return isObject( MonObj, QString("BoundaryAnHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est une frontiere discrete
+// Retourne vrai si l'objet est une frontiere discrete
 //================================================================
 bool HOMARD_UTILS::isBoundaryDi(_PTR(SObject) MonObj)
 {
    return isObject( MonObj, QString("BoundaryDiHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est une zone
+// Retourne vrai si l'objet est un cas
 //================================================================
-bool HOMARD_UTILS::isZone(_PTR(SObject) MonObj)
+bool HOMARD_UTILS::isCase(_PTR(SObject) MonObj)
 {
-   return isObject( MonObj, QString("ZoneHomard"), -1 ) ;
+   return isObject( MonObj, QString("CasHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est une Hypothese
+// Retourne vrai si l'objet est une Hypothese
 //================================================================
 bool HOMARD_UTILS::isHypo(_PTR(SObject) MonObj)
 {
    return isObject( MonObj, QString("HypoHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est une iteration
+// Retourne vrai si l'objet est une iteration
 //================================================================
 bool HOMARD_UTILS::isIter(_PTR(SObject) MonObj)
 {
    return isObject( MonObj, QString("IterationHomard"), 0 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est un cas
+// Retourne vrai si l'objet est un schema YACS
 //================================================================
-bool HOMARD_UTILS::isCase(_PTR(SObject) MonObj)
+bool HOMARD_UTILS::isYACS(_PTR(SObject) MonObj)
 {
-   return isObject( MonObj, QString("CasHomard"), -1 ) ;
+   return isObject( MonObj, QString("YACSHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est un fichier de messages
+// Retourne vrai si l'objet est une zone
 //================================================================
-bool HOMARD_UTILS::isFileMess(_PTR(SObject) MonObj)
+bool HOMARD_UTILS::isZone(_PTR(SObject) MonObj)
 {
-   return isObject( MonObj, QString("Mess"), 0 ) ;
+   return isObject( MonObj, QString("ZoneHomard"), -1 ) ;
 }
 //================================================================
-// Retourne vrai si l objet est un fichier de bilan
+// Retourne vrai si l'objet est un fichier de type TypeFile
 //================================================================
-bool HOMARD_UTILS::isFileSummary(_PTR(SObject) MonObj)
+bool HOMARD_UTILS::isFileType(_PTR(SObject) MonObj, QString TypeFile)
 {
-   return isObject( MonObj, QString("Summary"), 0 ) ;
+   return isObject( MonObj, TypeFile, 0 ) ;
 }
 
 //=========================================================================================================
-void HOMARD_UTILS::PushOnHelp(QString monFichierAide)
+void HOMARD_UTILS::PushOnHelp(QString monFichierAide, QString contexte, QString LanguageShort)
 {
-     LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
-     if (app) {
-        HOMARDGUI* aHomardGUI = dynamic_cast<HOMARDGUI*>( app->module( "Homard" ) );
-        app->onHelpContextModule(aHomardGUI ? app->moduleName(aHomardGUI->moduleName()) : QString(""), monFichierAide);
-     }
+  MESSAGE("Debut de PushOnHelp avec monFichierAide = "<< monFichierAide.toStdString().c_str());
+  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+  if (app)
+  {
+    HOMARDGUI* aHomardGUI = dynamic_cast<HOMARDGUI*>( app->module( "Homard" ) );
+    // Repertoire de reference de la documentation
+    QString rep = aHomardGUI ? app->moduleName(aHomardGUI->moduleName()) : QString("") ;
+    // WARNING/ATTENTION : si on savait recuperer la langue depuis les preferences, on ne ferait pas le passage par argument
+//     SUIT_ResourceMgr* resMgr = getApp()->resourceMgr();
+//     SUIT_ResourceMgr* resMgr = myModule->getApp()->resourceMgr();
+//     QString langue = resMgr->stringValue("language", "language", "en");
+//     QString langue = "fr" ;
+    MESSAGE(". LanguageShort " << LanguageShort.toStdString().c_str()) ;
+    // Complement du fichier
+    QString fichier = QString(LanguageShort+"/"+monFichierAide) ;
+    MESSAGE(". Appel de onHelpContextModule avec :");
+    MESSAGE("    rep      = "<< rep.toStdString().c_str());
+    MESSAGE("    fichier  = "<< fichier.toStdString().c_str());
+    MESSAGE("    contexte = "<< contexte.toStdString().c_str());
 
+    app->onHelpContextModule(rep, fichier, contexte);
+  }
 }
 //=========================================================================================================
index f202cadb49a1f65c4ab21bea5000c4819202b010..81182a0d051c33b3a71d8924cf6d7c5645b49b18 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #ifndef HOMARD_H_UTILS
 #define HOMARD_H_UTILS
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 
-#include <CORBA.h>
+#include <omniORB4/CORBA.h>
 #include CORBA_CLIENT_HEADER(HOMARD_Cas)
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 
@@ -52,38 +53,39 @@ class LightApp_SelectionMgr;
 
 namespace HOMARD_UTILS {
 
+  HOMARD_EXPORT
   _PTR(Study)
   GetCStudy(const SalomeApp_Study* theStudy);
-  SUIT_Study* GetActiveStudy();
-  _PTR(Study) GetActiveStudyDocument();
 
-  void updateObjBrowser();
+  HOMARD_EXPORT SUIT_Study* GetActiveStudy();
+  HOMARD_EXPORT _PTR(Study) GetActiveStudyDocument();
 
-  const SALOME_ListIO& selectedIO();    // Function returns a list of SALOME_InteractiveObject's from
+  HOMARD_EXPORT void updateObjBrowser();
+
+  HOMARD_EXPORT const SALOME_ListIO& selectedIO();    // Function returns a list of SALOME_InteractiveObject's from
                                         // selection manager in GUI
 
-  int   IObjectCount() ;                // Function returns the number of selected objects
+  HOMARD_EXPORT int   IObjectCount() ;                // Function returns the number of selected objects
 
-  Handle(SALOME_InteractiveObject) firstIObject() ;
+  HOMARD_EXPORT Handle(SALOME_InteractiveObject) firstIObject() ;
                                         // Function returns the first selected object in the list
                                         // of selected objects
 
-  Handle(SALOME_InteractiveObject) lastIObject() ;
+  HOMARD_EXPORT Handle(SALOME_InteractiveObject) lastIObject() ;
                                       // Function returns the last selected object in the list
                                        // of selected objects
 
-  bool isXmgrace(_PTR(SObject)  MonObj);
-  bool isBoundaryAn(_PTR(SObject)  MonObj);
-  bool isBoundaryDi(_PTR(SObject)  MonObj);
-  bool isZone(_PTR(SObject)  MonObj);
-  bool isHypo(_PTR(SObject)  MonObj);
-  bool isIter(_PTR(SObject)  MonObj);
-  bool isCase(_PTR(SObject)  MonObj);
-  bool isFileMess(_PTR(SObject)  MonObj);
-  bool isFileSummary(_PTR(SObject)  MonObj);
-  bool isObject(_PTR(SObject)  MonObj, QString TypeObject, int option );
-
-  void PushOnHelp(QString monFichierAide);
+  HOMARD_EXPORT bool isBoundaryAn(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isBoundaryDi(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isCase(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isHypo(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isIter(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isYACS(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isZone(_PTR(SObject)  MonObj);
+  HOMARD_EXPORT bool isFileType(_PTR(SObject)  MonObj, QString TypeFile);
+  HOMARD_EXPORT bool isObject(_PTR(SObject)  MonObj, QString TypeObject, int option );
+
+  HOMARD_EXPORT void PushOnHelp(QString monFichierAide, QString contexte, QString LanguageShort);
 
   extern SALOME_ListIO mySelected;
 }
index ab5b65389bb95abf2f3ed9e13d87ee01f548087e..b95385fd69f96a40d2c9c7b3d95522224ba38ac3 100644 (file)
@@ -7,6 +7,18 @@
         <source>HOM_MEN_HOMARD</source>
         <translation>HOMARD</translation>
     </message>
+    <message>
+        <source>HOM_MEN_MODIFICATION</source>
+        <translation>Modification</translation>
+    </message>
+    <message>
+        <source>HOM_MEN_INFORMATION</source>
+        <translation>Information</translation>
+    </message>
+    <message>
+        <source>HOM_MEN_YACS</source>
+        <translation>YACS</translation>
+    </message>
     <message>
         <source>HOM_MEN_NEW_CASE</source>
         <translation>New case</translation>
         <source>HOM_MEN_NEW_ITERATION</source>
         <translation>Next iteration</translation>
     </message>
+    <message>
+        <source>HOM_MEN_PURSUE_ITERATION</source>
+        <translation>Case: pursuit of a stored iteration</translation>
+    </message>
     <message>
         <source>HOM_MEN_COMPUTE</source>
         <translation>Compute</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_CASE</source>
-        <translation>Edit the case</translation>
+        <source>HOM_MEN_COMPUTE_PUBLISH</source>
+        <translation>Compute and publish</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_ITERATION</source>
-        <translation>Edit the iteration</translation>
+        <source>HOM_MEN_EDIT</source>
+        <translation>Edit</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_HYPO</source>
-        <translation>Edit the hypothesis</translation>
+        <source>HOM_MEN_DELETE</source>
+        <translation>Delete</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_ZONE</source>
-        <translation>Edit the zone</translation>
+        <source>HOM_MEN_MESH_INFO</source>
+        <translation>Mesh analysis</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_BOUNDARY</source>
-        <translation>Edit the boundary</translation>
+        <source>HOM_MEN_MESH_PUBLICATION</source>
+        <translation>Mesh publication</translation>
     </message>
     <message>
         <source>HOM_MEN_EDIT_MESS_FILE</source>
         <translation>Show the file</translation>
     </message>
+    <message>
+        <source>HOM_MEN_WRITE</source>
+        <translation>Write</translation>
+    </message>
     <message>
         <source>HOM_TOP_HOMARD</source>
         <translation>HOMARD</translation>
         <translation>Next iteration</translation>
     </message>
     <message>
-        <source>HOM_TOP_COMPUTE</source>
-        <translation>Compute</translation>
-    </message>
-    <message>
-        <source>HOM_TOP_EDIT_CASE</source>
-        <translation>Edit the case</translation>
+        <source>HOM_TOP_PURSUE_ITERATION</source>
+        <translation>Case: pursuit of a stored iteration</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_ITERATION</source>
-        <translation>Edit the iteration</translation>
+        <source>HOM_TOP_COMPUTE</source>
+        <translation>Compute</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_HYPO</source>
-        <translation>Edit the hypothesis</translation>
+        <source>HOM_TOP_COMPUTE_PUBLISH</source>
+        <translation>Compute and publish</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_ZONE</source>
-        <translation>Edit the zone</translation>
+        <source>HOM_TOP_EDIT</source>
+        <translation>Edit</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_BOUNDARY</source>
-        <translation>Edit the boundary</translation>
+        <source>HOM_TOP_DELETE</source>
+        <translation>Delete</translation>
     </message>
     <message>
         <source>HOM_TOP_EDIT_MESS_FILE</source>
         <translation>Next iteration</translation>
     </message>
     <message>
-        <source>HOM_STB_COMPUTE</source>
-        <translation>Compute</translation>
-    </message>
-    <message>
-        <source>HOM_STB_EDIT_CASE</source>
-        <translation>Edit the case</translation>
+        <source>HOM_STB_PURSUE_ITERATION</source>
+        <translation>Case: pursuit of a stored iteration</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_ITERATION</source>
-        <translation>Edit the iteration</translation>
+        <source>HOM_STB_COMPUTE</source>
+        <translation>Compute</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_HYPO</source>
-        <translation>Edit the hypothesis</translation>
+        <source>HOM_STB_COMPUTE_PUBLISH</source>
+        <translation>Compute and publish</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_ZONE</source>
-        <translation>Edit the zone</translation>
+        <source>HOM_STB_EDIT</source>
+        <translation>Edit</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_BOUNDARY</source>
-        <translation>Edit the boundary</translation>
+        <source>HOM_STB_DELETE</source>
+        <translation>Delete</translation>
     </message>
     <message>
         <source>HOM_STB_EDIT_MESS_FILE</source>
         <source>HOM_SELECT_OBJECT_3</source>
         <translation>Select an object with type %1.</translation>
     </message>
+    <message>
+        <source>HOM_SELECT_FILE_0</source>
+        <translation>File selection</translation>
+    </message>
     <message>
         <source>HOM_SELECT_FILE_1</source>
         <translation>Select a file.</translation>
         <source>HOM_SELECT_FILE_2</source>
         <translation>Select only one file.</translation>
     </message>
+    <message>
+        <source>HOM_SELECT_FILE_3</source>
+        <translation>This file cannot be opened.</translation>
+    </message>
+    <message>
+        <source>HOM_SCRIPT_FILE</source>
+        <translation>A script file must be given.</translation>
+    </message>
     <message>
         <source>HOM_MED_FILE_1</source>
         <translation>This MED file cannot be read.</translation>
     </message>
     <message>
         <source>HOM_CASE_DIRECTORY_2</source>
-        <translation>This directory is already used.</translation>
+        <translation>This directory is already used by the case </translation>
     </message>
     <message>
         <source>HOM_CASE_DIRECTORY_3</source>
         <translation>A valid directory for the case must be selected.</translation>
     </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_4</source>
+        <translation>A directory for the computation must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_1</source>
+        <translation>A starting directory for the pursuit must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_3</source>
+        <translation>A valid directory for the pursuit must be selected.</translation>
+    </message>
     <message>
         <source>HOM_CASE_MESH</source>
         <translation>The file of the initial mesh must be selected.</translation>
         <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
         <translation>Edition of a case</translation>
     </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE_0</source>
+        <translation>Initial mesh.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE</source>
+        <translation>Pursuit of an iteration.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+        <translation>Case: pursuit of a stored iteration</translation>
+    </message>
     <message>
         <source>HOM_ITER_NAME</source>
         <translation>The iteration must be named.</translation>
     </message>
     <message>
         <source>HOM_ITER_STARTING_POINT_1</source>
-        <translation>First iteration of the case</translation>
+        <translation>First iteration of the case.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_2</source>
+        <translation>First iteration of the case for the pursuit.</translation>
     </message>
     <message>
         <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
         <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
         <translation>Selected groups</translation>
     </message>
+    <message>
+        <source>HOM_MESH_INFO_0</source>
+        <translation>Mesh analysis</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_1</source>
+        <translation>Select at least one option.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_2</source>
+        <translation>Analysis in the object browser, file </translation>
+    </message>
+    <message>
+        <source>HOM_YACS_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of a schema YACS</translation>
+    </message>
+    <message>
+        <source>PREF_TAB_GENERAL</source>
+        <translation>General</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION</source>
+        <translation>Publication</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+        <translation>IN meshes</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>OUT meshes</translation>
+    </message>
+    <message>
+        <source>PREF_YACS</source>
+        <translation>YACS</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX</source>
+        <translation>Maximum numbers</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_ITER</source>
+        <translation>Iterations</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_NODE</source>
+        <translation>Nodes</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_ELEM</source>
+        <translation>Elements</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_CONVERGENCE</source>
+        <translation>Convergence</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_TYPE_TEST</source>
+        <translation>Test type</translation>
+    </message>
 </context>
 </TS>
index 5863f16ab71461cfb447c8b32bfc50b114fb5b1b..2026c26b82edbccfbb12c06ed9757ee93349b6ee 100644 (file)
@@ -7,42 +7,62 @@
         <source>HOM_MEN_HOMARD</source>
         <translation>HOMARD</translation>
     </message>
+    <message>
+        <source>HOM_MEN_MODIFICATION</source>
+        <translation>Modification</translation>
+    </message>
+    <message>
+        <source>HOM_MEN_INFORMATION</source>
+        <translation>Information</translation>
+    </message>
+    <message>
+        <source>HOM_MEN_YACS</source>
+        <translation>YACS</translation>
+    </message>
     <message>
         <source>HOM_MEN_NEW_CASE</source>
         <translation>Nouveau cas</translation>
     </message>
     <message>
         <source>HOM_MEN_NEW_ITERATION</source>
-        <translation>Nouvelle itération</translation>
+        <translation>Itération suivante</translation>
+    </message>
+    <message>
+        <source>HOM_MEN_PURSUE_ITERATION</source>
+        <translation>Cas de poursuite d&apos;une itération</translation>
     </message>
     <message>
         <source>HOM_MEN_COMPUTE</source>
         <translation>Calculer</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_CASE</source>
-        <translation>Editer le cas</translation>
+        <source>HOM_MEN_COMPUTE_PUBLISH</source>
+        <translation>Calculer et publier</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_ITERATION</source>
-        <translation>Editer l&apos;itération</translation>
+        <source>HOM_MEN_EDIT</source>
+        <translation>Editer</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_HYPO</source>
-        <translation>Editer l&apos;hypothèse</translation>
+        <source>HOM_MEN_DELETE</source>
+        <translation>Supprimer</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_ZONE</source>
-        <translation>Editer la zone</translation>
+        <source>HOM_MEN_MESH_INFO</source>
+        <translation>Analyse de maillage</translation>
     </message>
     <message>
-        <source>HOM_MEN_EDIT_BOUNDARY</source>
-        <translation>Editer la frontière</translation>
+        <source>HOM_MEN_MESH_PUBLICATION</source>
+        <translation>Publication du maillage</translation>
     </message>
     <message>
         <source>HOM_MEN_EDIT_MESS_FILE</source>
         <translation>Afficher le fichier</translation>
     </message>
+    <message>
+        <source>HOM_MEN_WRITE</source>
+        <translation>Ecrire</translation>
+    </message>
     <message>
         <source>HOM_TOP_HOMARD</source>
         <translation>HOMARD</translation>
     </message>
     <message>
         <source>HOM_TOP_NEW_ITERATION</source>
-        <translation>Nouvelle itération</translation>
-    </message>
-    <message>
-        <source>HOM_TOP_COMPUTE</source>
-        <translation>Calculer</translation>
+        <translation>Itération suivante</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_CASE</source>
-        <translation>Editer le cas</translation>
+        <source>HOM_TOP_PURSUE_ITERATION</source>
+        <translation>Cas de poursuite d&apos;une itération</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_ITERATION</source>
-        <translation>Editer l&apos;itération</translation>
+        <source>HOM_TOP_COMPUTE</source>
+        <translation>Calculer</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_HYPO</source>
-        <translation>Editer l&apos;hypothèse</translation>
+        <source>HOM_TOP_COMPUTE_PUBLISH</source>
+        <translation>Calculer et publier</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_ZONE</source>
-        <translation>Editer la zone</translation>
+        <source>HOM_TOP_EDIT</source>
+        <translation>Editer</translation>
     </message>
     <message>
-        <source>HOM_TOP_EDIT_BOUNDARY</source>
-        <translation>Editer la frontière</translation>
+        <source>HOM_TOP_DELETE</source>
+        <translation>Supprimer</translation>
     </message>
     <message>
         <source>HOM_TOP_EDIT_MESS_FILE</source>
     </message>
     <message>
         <source>HOM_STB_NEW_ITERATION</source>
-        <translation>Nouvelle itération</translation>
-    </message>
-    <message>
-        <source>HOM_STB_COMPUTE</source>
-        <translation>Calculer</translation>
+        <translation>Itération suivante</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_CASE</source>
-        <translation>Editer le cas</translation>
+        <source>HOM_STB_PURSUE_ITERATION</source>
+        <translation>Cas de poursuite d&apos;une itération</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_ITERATION</source>
-        <translation>Editer l&apos;itération</translation>
+        <source>HOM_STB_COMPUTE</source>
+        <translation>Calculer</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_HYPO</source>
-        <translation>Editer l&apos;hypothèse</translation>
+        <source>HOM_STB_COMPUTE_PUBLISH</source>
+        <translation>Calculer et publier</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_ZONE</source>
-        <translation>Editer la zone</translation>
+        <source>HOM_STB_EDIT</source>
+        <translation>Editer</translation>
     </message>
     <message>
-        <source>HOM_STB_EDIT_BOUNDARY</source>
-        <translation>Editer la frontière</translation>
+        <source>HOM_STB_DELETE</source>
+        <translation>Supprimer</translation>
     </message>
     <message>
         <source>HOM_STB_EDIT_MESS_FILE</source>
         <source>HOM_SELECT_OBJECT_3</source>
         <translation>Sélectionner un objet de type %1.</translation>
     </message>
+    <message>
+        <source>HOM_SELECT_FILE_0</source>
+        <translation>Choix de fichier</translation>
+    </message>
     <message>
         <source>HOM_SELECT_FILE_1</source>
         <translation>Sélectionner un fichier.</translation>
         <source>HOM_SELECT_FILE_2</source>
         <translation>Sélectionner un seul fichier.</translation>
     </message>
+    <message>
+        <source>HOM_SELECT_FILE_3</source>
+        <translation>Impossible d&apos;ouvrir ce fichier.</translation>
+    </message>
+    <message>
+        <source>HOM_SCRIPT_FILE</source>
+        <translation>Il faut donner un fichier pour le script python.</translation>
+    </message>
     <message>
         <source>HOM_MED_FILE_1</source>
         <translation>Ce fichier MED est illisible.</translation>
     </message>
     <message>
         <source>HOM_CASE_DIRECTORY_2</source>
-        <translation>Ce répertoire est déjà utilisé.</translation>
+        <translation>Ce répertoire est déjà utilisé par le cas </translation>
     </message>
     <message>
         <source>HOM_CASE_DIRECTORY_3</source>
         <translation>Un répertoire valide doit être choisi.</translation>
     </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_4</source>
+        <translation>Il faut choisir un répertoire de travail pour le calcul.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_1</source>
+        <translation>Il faut choisir un répertoire contenant l&apos;itération à poursuivre.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_3</source>
+        <translation>Un répertoire valide contenant l&apos;itération à poursuivre doit être choisi.</translation>
+    </message>
     <message>
         <source>HOM_CASE_MESH</source>
         <translation>Il faut choisir le maillage initial.</translation>
         <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
         <translation>Edition d&apos;un cas</translation>
     </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE_0</source>
+        <translation>Maillage initial.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE</source>
+        <translation>Poursuite d&apos;une itération.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+        <translation>Cas de poursuite d&apos;une itération</translation>
+    </message>
+    <message>
+        <source>The configuration file cannot be found.</source>
+        <translation>Le fichier de configuration de HOMARD est introuvable.</translation>
+    </message>
+    <message>
+        <source>The configuration file cannot be read.</source>
+        <translation>Le fichier de configuration de HOMARD est illisible.</translation>
+    </message>
+    <message>
+        <source>The HOMARD mesh file cannot be found.</source>
+        <translation>Le fichier de maillage de HOMARD est introuvable.</translation>
+    </message>
     <message>
         <source>HOM_ITER_NAME</source>
         <translation>Il faut donner un nom à l&apos;itération.</translation>
     </message>
     <message>
         <source>HOM_ITER_STARTING_POINT_1</source>
-        <translation>Itération initiale du cas</translation>
+        <translation>Itération initiale du cas.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_2</source>
+        <translation>Itération initiale du cas pour la poursuite.</translation>
     </message>
     <message>
         <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
         <source>Non conformal option</source>
         <translation>Option de non conformité</translation>
     </message>
+    <message>
+        <source>Conformity +</source>
+        <translation>Conformité +</translation>
+    </message>
     <message>
         <source>Free</source>
         <translation>Libre</translation>
         <source>Maximal level</source>
         <translation>Niveau maximal</translation>
     </message>
+    <message>
+        <source>Output of the level of refinement</source>
+        <translation>Sortie du niveau de raffinement</translation>
+    </message>
+    <message>
+        <source>Output of the qualities</source>
+        <translation>Sortie des qualités</translation>
+    </message>
+    <message>
+        <source>Output of the diameters</source>
+        <translation>Sortie des diamètres</translation>
+    </message>
+    <message>
+        <source>Output of the parents</source>
+        <translation>Sortie des parents</translation>
+    </message>
+    <message>
+        <source>Output of the neighbours</source>
+        <translation>Sortie des voisins</translation>
+    </message>
     <message>
         <source>Create an iteration</source>
         <translation>Création d&apos;une itération</translation>
         <source>Previous iteration</source>
         <translation>Itération précédente</translation>
     </message>
+    <message>
+        <source>Invalid boundary</source>
+        <translation>Frontière non valable</translation>
+    </message>
+    <message>
+        <source>Invalid case</source>
+        <translation>Cas non valable</translation>
+    </message>
+    <message>
+        <source>Invalid case context</source>
+        <translation>Cas contextuel non valable</translation>
+    </message>
+    <message>
+        <source>Invalid hypothesis</source>
+        <translation>Hypothèse non valable</translation>
+    </message>
+    <message>
+        <source>Invalid iteration</source>
+        <translation>Itération non valable</translation>
+    </message>
+    <message>
+        <source>Invalid zone</source>
+        <translation>Zone non valable</translation>
+    </message>
+    <message>
+        <source>This boundary has already been defined.</source>
+        <translation>Cette frontière est déjà définie.</translation>
+    </message>
+    <message>
+        <source>This case has already been defined.</source>
+        <translation>Ce cas est déjà défini.</translation>
+    </message>
+    <message>
+        <source>This hypothesis has already been defined.</source>
+        <translation>Cette hypothèse est déjà définie.</translation>
+    </message>
+    <message>
+        <source>This iteration has already been defined.</source>
+        <translation>Cette itération est déjà définie.</translation>
+    </message>
+    <message>
+        <source>This zone has already been defined.</source>
+        <translation>Cette zone est déjà définie.</translation>
+    </message>
+    <message>
+        <source>The parent iteration is not defined.</source>
+        <translation>L&apos;itération parent n&apos;est pas définie.</translation>
+    </message>
+    <message>
+        <source>Unable to create the iteration.</source>
+        <translation>Impossible de créer l&apos;itération.</translation>
+    </message>
+    <message>
+        <source>The directory for the computation cannot be created.</source>
+        <translation>Impossible de créer le répertoire pour le calcul de l&apos;itération.</translation>
+    </message>
+    <message>
+        <source>This iteration is the first of the case and cannot be computed.</source>
+        <translation>Cette itération définit le point de départ du cas. Elle ne peut pas être calculée.</translation>
+    </message>
+    <message>
+        <source>This iteration does not have any associated hypothesis.</source>
+        <translation>Cette itération n&apos;est associée à aucune hypothèse.</translation>
+    </message>
+    <message>
+        <source>The mesh file does not exist.</source>
+        <translation>Le fichier du maillage n&apos;existe pas.</translation>
+    </message>
+    <message>
+        <source>The mesh file cannot be deleted.</source>
+        <translation>Impossible de supprimer le fichier du maillage.</translation>
+    </message>
     <message>
         <source>Mesh n</source>
         <translation>Maillage n</translation>
         <source>Percentage of meshes</source>
         <translation>Pourcentage de mailles</translation>
     </message>
+    <message>
+        <source>Mean + n*(std deviation)</source>
+        <translation>Moyenne + n*(ecart-type)</translation>
+    </message>
     <message>
         <source>No refinement</source>
         <translation>Sans raffinement</translation>
     </message>
+    <message>
+        <source>Mean - n*(std deviation)</source>
+        <translation>Moyenne - n*(ecart-type)</translation>
+    </message>
     <message>
         <source>No coarsening</source>
         <translation>Sans déraffinement</translation>
         <source>Type of boundary</source>
         <translation>Type de la frontière</translation>
     </message>
+    <message>
+        <source>Torus</source>
+        <translation>Tore</translation>
+    </message>
     <message>
         <source>Radius</source>
         <translation>Rayon</translation>
     </message>
+    <message>
+        <source>Radius 1</source>
+        <translation>Rayon 1</translation>
+    </message>
+    <message>
+        <source>Radius 2</source>
+        <translation>Rayon 2</translation>
+    </message>
     <message>
         <source>External radius</source>
         <translation>Rayon externe</translation>
         <source>Z axis</source>
         <translation>Z axe</translation>
     </message>
+    <message>
+        <source>R revolution</source>
+        <translation>R révolution</translation>
+    </message>
+    <message>
+        <source>Primary R</source>
+        <translation>R primaire</translation>
+    </message>
     <message>
         <source>HOM_BOUN_NAME</source>
         <translation>Il faut donner un nom à la frontière.</translation>
         <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
         <translation>Groupes choisis</translation>
     </message>
+    <message>
+        <source>The height must be positive.</source>
+        <translation>La hauteur doit être positive.</translation>
+    </message>
+    <message>
+        <source>The radius must be positive.</source>
+        <translation>Un rayon doit être positif.</translation>
+    </message>
+    <message>
+        <source>The axis must be a non 0 vector.</source>
+        <translation>L&apos;axe doit être un vecteur non nul.</translation>
+    </message>
+    <message>
+        <source>The angle must be included higher than 0 degree and lower than 90 degrees.</source>
+        <translation>L&apos;angle doit être compris entre 0 et 90 degrés.</translation>
+    </message>
+    <message>
+        <source>The radius must be different.</source>
+        <translation>Les rayons doivent être différents.</translation>
+    </message>
+    <message>
+        <source>The centers must be different.</source>
+        <translation>Les centres doivent être différents.</translation>
+    </message>
+    <message>
+        <source>The external radius must be higher than the internal radius.</source>
+        <translation>Le rayon externe doit être supérieur au rayon interne.</translation>
+    </message>
+    <message>
+        <source>The X coordinates are not coherent.</source>
+        <translation>Les coordonnées en X ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The Y coordinates are not coherent.</source>
+        <translation>Les coordonnées en Y ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The Z coordinates are not coherent.</source>
+        <translation>Les coordonnées en Z ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The first coordinates are not coherent.</source>
+        <translation>Les premières coordonnées ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The second coordinates are not coherent.</source>
+        <translation>Les secondes coordonnées ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The orientation must be 1, 2 or 3.</source>
+        <translation>L&apos;orientation vaut 1, 2 ou 3.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_0</source>
+        <translation>Analyse de maillage</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_1</source>
+        <translation>Choisir au moins une option.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_2</source>
+        <translation>Bilan de l&apos;analyse dans l&apos;arbre d&apos;études, fichier </translation>
+    </message>
     <message>
         <source>Filtering with groups</source>
         <translation>Filtrage par les groupes</translation>
         <source>Group</source>
         <translation>Groupe</translation>
     </message>
+    <message>
+        <source>Information on a mesh</source>
+        <translation>Analyse d&apos;un maillage</translation>
+    </message>
+    <message>
+        <source>Group size</source>
+        <translation>Taille des domaines</translation>
+    </message>
+    <message>
+        <source>Quality</source>
+        <translation>Qualité</translation>
+    </message>
+    <message>
+        <source>Connection</source>
+        <translation>Connexité</translation>
+    </message>
+    <message>
+        <source>Diametre</source>
+        <translation>Diamètre</translation>
+    </message>
+    <message>
+        <source>Entanglement</source>
+        <translation>Interpénétration</translation>
+    </message>
+    <message>
+        <source>No change is allowed in a boundary. Ask for evolution.</source>
+        <translation>Impossible de changer une donnée dans une frontière. Demander une évolution.</translation>
+    </message>
+    <message>
+        <source>This boundary is used in a case and cannot be deleted.</source>
+        <translation>Cette frontière est utilisée dans un cas ; elle ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>This hypothesis is used and cannot be deleted.</source>
+        <translation>Cette hypothèse est utilisée dans une itération ; elle ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>This iteration cannot be deleted.</source>
+        <translation>Cette itération ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>This zone is used in an hypothesis and cannot be deleted.</source>
+        <translation>Cette zone est utilisée dans une hypothèse ; elle ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>The directory for the calculation cannot be cleared.</source>
+        <translation>Menage du repertoire de calcul impossible</translation>
+    </message>
+    <message>
+        <source>Starting point</source>
+        <translation>Point de départ</translation>
+    </message>
+    <message>
+        <source>From an iteration</source>
+        <translation>A partir d&apos;une itération</translation>
+    </message>
+    <message>
+        <source>From a case</source>
+        <translation>A partir d&apos;un cas</translation>
+    </message>
+    <message>
+        <source>Iteration into the case</source>
+        <translation>Choix d&apos;une itération dans le cas</translation>
+    </message>
+    <message>
+        <source>Last iteration</source>
+        <translation>A partir de la dernière itération</translation>
+    </message>
+    <message>
+        <source>Iteration number</source>
+        <translation>A partir d&apos;une itération numérotée</translation>
+    </message>
+    <message>
+        <source>The directory of the case does not exist.</source>
+        <translation>Le répertoire du cas n&apos;existe pas.</translation>
+    </message>
+    <message>
+        <source>The directory for the case cannot be modified because some iterations are already defined.</source>
+        <translation>Impossible de changer le répertoire du cas car des itérations ont déjà été définies.</translation>
+    </message>
+    <message>
+        <source>The directory for the case cannot be reached.</source>
+        <translation>Impossible d&apos;atteindre ce répertoire pour le cas.</translation>
+    </message>
+    <message>
+        <source>The starting point for the case cannot be copied into the working directory.</source>
+        <translation>Impossible de copier le point de départ du cas dans le répertoire de travail.</translation>
+    </message>
+    <message>
+        <source>The starting point for the case cannot be moved into the new directory.</source>
+        <translation>Impossible de déplacer le point de départ du cas dans le nouveau répertoire.</translation>
+    </message>
+    <message>
+        <source>The directory of the case for the pursuit does not exist.</source>
+        <translation>Le répertoire du cas de reprise n&apos;existe pas.</translation>
+    </message>
+    <message>
+        <source>The directory of the iteration does not exist.</source>
+        <translation>Le répertoire de l&apos;itération de reprise n&apos;existe pas.</translation>
+    </message>
+    <message>
+        <source>The number of iteration must be positive.</source>
+        <translation>Le numéro de l&apos;itération doit etre positif.</translation>
+    </message>
+    <message>
+        <source>Number of iteration</source>
+        <translation>Numéro de l&apos;itération</translation>
+    </message>
+    <message>
+        <source>Case</source>
+        <translation>Cas</translation>
+    </message>
+    <message>
+        <source>Mesh file</source>
+        <translation>Maillage initial</translation>
+    </message>
+    <message>
+        <source>Constant</source>
+        <translation>Constant</translation>
+    </message>
+    <message>
+        <source>Variable</source>
+        <translation>Variable</translation>
+    </message>
+    <message>
+        <source>Type of schema</source>
+        <translation>Type de schema</translation>
+    </message>
+    <message>
+        <source>Maximum of ...</source>
+        <translation>Maximum de ...</translation>
+    </message>
+    <message>
+        <source>Iterations</source>
+        <translation>Itérations</translation>
+    </message>
+    <message>
+        <source>Nodes</source>
+        <translation>Noeuds</translation>
+    </message>
+    <message>
+        <source>Elements</source>
+        <translation>Eléments</translation>
+    </message>
+    <message>
+        <source>Test of convergence</source>
+        <translation>Test de convergence</translation>
+    </message>
     <message>
         <source>Edit a file</source>
         <translation>Affichage d&apos;un fichier</translation>
         <source>Print</source>
         <translation>Imprimer</translation>
     </message>
+    <message>
+        <source>Invalid study context</source>
+        <translation>Etude contextuelle non valable</translation>
+    </message>
+    <message>
+        <source>HOM_YACS_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d&apos;un schéma YACS</translation>
+    </message>
+    <message>
+        <source>PREF_TAB_GENERAL</source>
+        <translation>Général</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION</source>
+        <translation>Publication</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+        <translation>Les maillages d&apos;entrée</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>Les maillages de sortie</translation>
+    </message>
+    <message>
+        <source>PREF_YACS</source>
+        <translation>YACS</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX</source>
+        <translation>Nombres maximum</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_ITER</source>
+        <translation>Itérations</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_NODE</source>
+        <translation>Noeuds</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_MAX_ELEM</source>
+        <translation>Eléments</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_CONVERGENCE</source>
+        <translation>Convergence</translation>
+    </message>
+    <message>
+        <source>PREF_YACS_TYPE_TEST</source>
+        <translation>Type de test</translation>
+    </message>
 </context>
 </TS>
diff --git a/src/HOMARDGUI/HOMARD_msg_ja.ts b/src/HOMARDGUI/HOMARD_msg_ja.ts
new file mode 100644 (file)
index 0000000..2ad671d
--- /dev/null
@@ -0,0 +1,1136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja" sourcelanguage="en">
+  <context>
+    <name>@default</name>
+    <message>
+      <source>HOM_MEN_HOMARD</source>
+      <translation>ロブスター</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_MODIFICATION</source>
+      <translation>変更</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_INFORMATION</source>
+      <translation>情報</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_YACS</source>
+      <translation>YACS</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_NEW_CASE</source>
+      <translation>新しいケース</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_NEW_ITERATION</source>
+      <translation>新しいイテレーション</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_PURSUE_ITERATION</source>
+      <translation>イテレーションの追跡</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_COMPUTE</source>
+      <translation>計算します。</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_COMPUTE_PUBLISH</source>
+      <translation>計算と発行</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_EDIT</source>
+      <translation>編集(&amp;E)</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_DELETE</source>
+      <translation>削除</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_MESH_INFO</source>
+      <translation>メッシュの解析</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_MESH_PUBLICATION</source>
+      <translation>メッシュ発行</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_EDIT_MESS_FILE</source>
+      <translation>ファイルを表示します。</translation>
+    </message>
+    <message>
+      <source>HOM_MEN_WRITE</source>
+      <translation>書き込み</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_HOMARD</source>
+      <translation>ロブスター</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_NEW_CASE</source>
+      <translation>新しいケース</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_NEW_ITERATION</source>
+      <translation>新しいイテレーション</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_PURSUE_ITERATION</source>
+      <translation>イテレーションの追跡</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_COMPUTE</source>
+      <translation>計算します。</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_COMPUTE_PUBLISH</source>
+      <translation>計算と発行</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_EDIT</source>
+      <translation>編集</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_DELETE</source>
+      <translation>削除</translation>
+    </message>
+    <message>
+      <source>HOM_TOP_EDIT_MESS_FILE</source>
+      <translation>ファイルを表示します。</translation>
+    </message>
+    <message>
+      <source>HOM_STB_HOMARD</source>
+      <translation>ロブスター</translation>
+    </message>
+    <message>
+      <source>HOM_STB_NEW_CASE</source>
+      <translation>新しいケース</translation>
+    </message>
+    <message>
+      <source>HOM_STB_NEW_ITERATION</source>
+      <translation>新しいイテレーション</translation>
+    </message>
+    <message>
+      <source>HOM_STB_PURSUE_ITERATION</source>
+      <translation>イテレーションの追跡</translation>
+    </message>
+    <message>
+      <source>HOM_STB_COMPUTE</source>
+      <translation>計算</translation>
+    </message>
+    <message>
+      <source>HOM_STB_COMPUTE_PUBLISH</source>
+      <translation>計算と発行</translation>
+    </message>
+    <message>
+      <source>HOM_STB_EDIT</source>
+      <translation>編集</translation>
+    </message>
+    <message>
+      <source>HOM_STB_DELETE</source>
+      <translation>削除</translation>
+    </message>
+    <message>
+      <source>HOM_STB_EDIT_MESS_FILE</source>
+      <translation>ファイルを表示します。</translation>
+    </message>
+    <message>
+      <source>HOM_WARNING</source>
+      <translation>警告</translation>
+    </message>
+    <message>
+      <source>HOM_ERROR</source>
+      <translation>エラー</translation>
+    </message>
+    <message>
+      <source>HOM_INACTIVE_BUTTON</source>
+      <translation>アクティブでないボタン</translation>
+    </message>
+    <message>
+      <source>OK</source>
+      <translation>Ok</translation>
+    </message>
+    <message>
+      <source>Apply</source>
+      <translation>適用</translation>
+    </message>
+    <message>
+      <source>Cancel</source>
+      <translation>キャンセル</translation>
+    </message>
+    <message>
+      <source>Help</source>
+      <translation>ヘルプ</translation>
+    </message>
+    <message>
+      <source>New</source>
+      <translation>新規</translation>
+    </message>
+    <message>
+      <source>Edit</source>
+      <translation>編集</translation>
+    </message>
+    <message>
+      <source>Quit</source>
+      <translation>終了</translation>
+    </message>
+    <message>
+      <source>Name</source>
+      <translation>名前</translation>
+    </message>
+    <message>
+      <source>Directory</source>
+      <translation>ディレクトリ</translation>
+    </message>
+    <message>
+      <source>Mesh</source>
+      <translation>メッシュ</translation>
+    </message>
+    <message>
+      <source>Selection</source>
+      <translation>選択</translation>
+    </message>
+    <message>
+      <source>None</source>
+      <translation>なし</translation>
+    </message>
+    <message>
+      <source>All</source>
+      <translation>全て</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_1</source>
+      <translation>オブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_2</source>
+      <translation>1 つのオブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_3</source>
+      <translation>型 %1 のオブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_0</source>
+      <translation>ファイル選択</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_1</source>
+      <translation>ファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_2</source>
+      <translation>1 つのファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_3</source>
+      <translation>このファイルを開くことができません。</translation>
+    </message>
+    <message>
+      <source>HOM_SCRIPT_FILE</source>
+      <translation>我々 は python スクリプトにファイルを与える必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_1</source>
+      <translation>この医学ファイルは読み取り不可能です。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_2</source>
+      <translation>この医学のファイルには、メッシュが含まれていません。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_3</source>
+      <translation>この医学のファイルにはよりも 1 つのメッシュが含まれています。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_4</source>
+      <translation>音楽配信マック & ファイルのメッシュを読み取れませんでした。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_5</source>
+      <translation>この医学のファイルには、フィールドが含まれていません。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_6</source>
+      <translation>医学ファイル (秒) (秒) フィールドを読み取ることができません。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_STUDY</source>
+      <translation>研究医 associe
+ のファイルを選択または医学ファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>Create a case</source>
+      <translation>ケースの作成</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_NAME</source>
+      <translation>場合に名前を付ける必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_1</source>
+      <translation>1 つの場合を動作するようにディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_2</source>
+      <translation>このディレクトリは、既に使用中です。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_3</source>
+      <translation>有効なディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_4</source>
+      <translation>計算のための作業ディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_START_DIRECTORY_1</source>
+      <translation>追跡のため開始点を選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_START_DIRECTORY_3</source>
+      <translation>追跡のため有効な方向を選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_MESH</source>
+      <translation>1 つは、初期のメッシュを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_GROUP</source>
+      <translation>グループ"%1"は、以上の境界線に割り当てることはできません。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
+      <translation>場合の編集</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_STATE_0</source>
+      <translation>初期メッシュ。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_STATE</source>
+      <translation>イテレーションの継続。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+      <translation>イテレーションの追跡</translation>
+    </message>
+    <message>
+      <source>The configuration file cannot be found.</source>
+      <translation>コンフィギュレーションファイルが見つかりません。</translation>
+    </message>
+    <message>
+      <source>The configuration file cannot be read.</source>
+      <translation>コンフィギュレーションファイルが読み込めません。</translation>
+    </message>
+    <message>
+      <source>The HOMARD mesh file cannot be found.</source>
+      <translation>HOMARDメッシュファイルが見つかりません。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_NAME</source>
+      <translation>名前を反復処理する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT</source>
+      <translation>これは、前のイテレーションを指定する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_MESH</source>
+      <translation>最終的なメッシュの名前。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_HYPO</source>
+      <translation>仮説を選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_FIELD_FILE</source>
+      <translation>この前提には、ファイルのフィールドを指定する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_0</source>
+      <translation>メッシュ</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_1</source>
+      <translation>ケースの最初のイテレーションです。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_2</source>
+      <translation>検察側の事件の最初のイテレーションです。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
+      <translation>イテレーションの編集</translation>
+    </message>
+    <message>
+      <source>Discrete boundary</source>
+      <translation>離散境界</translation>
+    </message>
+    <message>
+      <source>Analytical boundary</source>
+      <translation>解析的境界</translation>
+    </message>
+    <message>
+      <source>Conformity type</source>
+      <translation>適合タイプ</translation>
+    </message>
+    <message>
+      <source>Conformal</source>
+      <translation>等角</translation>
+    </message>
+    <message>
+      <source>Non conformal</source>
+      <translation>非共形</translation>
+    </message>
+    <message>
+      <source>Non conformal option</source>
+      <translation>非共形オプション</translation>
+    </message>
+    <message>
+      <source>Conformity +</source>
+      <translation>適合性 +</translation>
+    </message>
+    <message>
+      <source>Free</source>
+      <translation>Free</translation>
+    </message>
+    <message>
+      <source>1 hanging node per mesh</source>
+      <translation>メッシュあたりの1接続節点</translation>
+    </message>
+    <message>
+      <source>1 node per edge</source>
+      <translation>エッジ辺りの1節点</translation>
+    </message>
+    <message>
+      <source>Advanced options</source>
+      <translation>詳細オプション</translation>
+    </message>
+    <message>
+      <source>Authorized pyramids</source>
+      <translation>認定済みピラミッド</translation>
+    </message>
+    <message>
+      <source>Minimal diameter</source>
+      <translation>最小径</translation>
+    </message>
+    <message>
+      <source>Initialization of adaptation</source>
+      <translation>適応の初期化</translation>
+    </message>
+    <message>
+      <source>Maximal level</source>
+      <translation>最大レベル</translation>
+    </message>
+    <message>
+      <source>Output of the level of refinement</source>
+      <translation>リファインレベルの出力</translation>
+    </message>
+    <message>
+      <source>Output of the qualities</source>
+      <translation>品質の出力</translation>
+    </message>
+    <message>
+      <source>Output of the diameters</source>
+      <translation>直径の出力</translation>
+    </message>
+    <message>
+      <source>Create an iteration</source>
+      <translation>イテレーションの作成</translation>
+    </message>
+    <message>
+      <source>Iteration Name</source>
+      <translation>イテレーションの名前</translation>
+    </message>
+    <message>
+      <source>Previous iteration</source>
+      <translation>以前のイテレーション</translation>
+    </message>
+    <message>
+      <source>Invalid boundary</source>
+      <translation>無効な境界</translation>
+    </message>
+    <message>
+      <source>Invalid case</source>
+      <translation>無効なケース</translation>
+    </message>
+    <message>
+      <source>Invalid case context</source>
+      <translation>ケースの内容が無効です</translation>
+    </message>
+    <message>
+      <source>Invalid hypothesis</source>
+      <translation>無効なhypothesis</translation>
+    </message>
+    <message>
+      <source>Invalid iteration</source>
+      <translation>無効なイテレーション</translation>
+    </message>
+    <message>
+      <source>Invalid zone</source>
+      <translation>無効なゾーン</translation>
+    </message>
+    <message>
+      <source>This boundary has already been defined.</source>
+      <translation>この境界は既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This case has already been defined.</source>
+      <translation>このケースは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This hypothesis has already been defined.</source>
+      <translation>このhypothesisは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This iteration has already been defined.</source>
+      <translation>このイテレーションは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This zone has already been defined.</source>
+      <translation>このゾーンは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>The parent iteration is not defined.</source>
+      <translation>親イテレーションは、定義されていません。</translation>
+    </message>
+    <message>
+      <source>Unable to create the iteration.</source>
+      <translation>イテレーションを作成することができません。</translation>
+    </message>
+    <message>
+      <source>The directory for the computation cannot be created.</source>
+      <translation>計算のためのディレクトリを作成できません。</translation>
+    </message>
+    <message>
+      <source>This iteration is the first of the case and cannot be computed.</source>
+      <translation>このイタレーションはケースの最初であり、計算できません。</translation>
+    </message>
+    <message>
+      <source>This iteration does not have any associated hypothesis.</source>
+      <translation>このイタレーションは関連した hypothesis がありません。</translation>
+    </message>
+    <message>
+      <source>The mesh file does not exist.</source>
+      <translation>メッシュ ファイルは存在しません。</translation>
+    </message>
+    <message>
+      <source>The mesh file cannot be deleted.</source>
+      <translation>メッシュ ファイルを削除できません。</translation>
+    </message>
+    <message>
+      <source>Mesh n</source>
+      <translation>メッシュ n</translation>
+    </message>
+    <message>
+      <source>Mesh n+1</source>
+      <translation>メッシュ n + 1</translation>
+    </message>
+    <message>
+      <source>Field information</source>
+      <translation>フィールド情報</translation>
+    </message>
+    <message>
+      <source>Field file</source>
+      <translation>フィールド ファイル</translation>
+    </message>
+    <message>
+      <source>No time step</source>
+      <translation>タイムステップなし</translation>
+    </message>
+    <message>
+      <source>Last time step</source>
+      <translation>最終タイムステップ</translation>
+    </message>
+    <message>
+      <source>Chosen time step</source>
+      <translation>選択されたタイムステップ</translation>
+    </message>
+    <message>
+      <source>Time step</source>
+      <translation>タイムステップ</translation>
+    </message>
+    <message>
+      <source>Rank</source>
+      <translation>ランク</translation>
+    </message>
+    <message>
+      <source>Hypothesis</source>
+      <translation>Hypothesis</translation>
+    </message>
+    <message>
+      <source>Create an hypothesis</source>
+      <translation>hypothesis の作成</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NAME</source>
+      <translation>仮説に名前を付ける必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_FIELD_FILE</source>
+      <translation>それはフィールドのファイルを提供する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_ZONE_1</source>
+      <translation>ゾーンを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_ZONE_2</source>
+      <translation>1 つは、少なくとも 1 つのゾーンを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_ZONE_3</source>
+      <translation>洗練された、または deraffinement、両方ではないです。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_L2</source>
+      <translation>標準の L2</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_INF</source>
+      <translation>無限の標準</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_ABS</source>
+      <translation>絶対値</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_REL</source>
+      <translation>関係</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_COMP</source>
+      <translation>1 つ以上のコンポーネントを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_EDIT_WINDOW_TITLE</source>
+      <translation>仮説の編集</translation>
+    </message>
+    <message>
+      <source>Type of adaptation</source>
+      <translation>適合のタイプ</translation>
+    </message>
+    <message>
+      <source>Uniform</source>
+      <translation>均一</translation>
+    </message>
+    <message>
+      <source>Driven by a field</source>
+      <translation>フィールドによって駆動</translation>
+    </message>
+    <message>
+      <source>With geometrical zones</source>
+      <translation>幾何学的ゾーン使用</translation>
+    </message>
+    <message>
+      <source>Uniform adaptation</source>
+      <translation>均一な適応</translation>
+    </message>
+    <message>
+      <source>Coarsening</source>
+      <translation>粗大化</translation>
+    </message>
+    <message>
+      <source>Refinement</source>
+      <translation>リファインメント</translation>
+    </message>
+    <message>
+      <source>Nothing</source>
+      <translation>なし</translation>
+    </message>
+    <message>
+      <source>File of the fields</source>
+      <translation>フィールドファイル</translation>
+    </message>
+    <message>
+      <source>Governing field for the adaptation</source>
+      <translation>適合のためにフィールドを管理</translation>
+    </message>
+    <message>
+      <source>Field name</source>
+      <translation>フィールド名</translation>
+    </message>
+    <message>
+      <source>Jump between elements</source>
+      <translation>要素間ジャンプ</translation>
+    </message>
+    <message>
+      <source>Component</source>
+      <translation>コンポーネント</translation>
+    </message>
+    <message>
+      <source>Refinement threshold</source>
+      <translation>リファインメント閾値</translation>
+    </message>
+    <message>
+      <source>Coarsening threshold</source>
+      <translation>粗大化閾値</translation>
+    </message>
+    <message>
+      <source>Percentage of meshes</source>
+      <translation>メッシュの割合</translation>
+    </message>
+    <message>
+      <source>Mean + n*(std deviation)</source>
+      <translation>平均 + n * (標準偏差)</translation>
+    </message>
+    <message>
+      <source>No refinement</source>
+      <translation>リファインメントなし</translation>
+    </message>
+    <message>
+      <source>Mean - n*(std deviation)</source>
+      <translation>平均 - n * (標準偏差)</translation>
+    </message>
+    <message>
+      <source>No coarsening</source>
+      <translation>粗大化なし</translation>
+    </message>
+    <message>
+      <source>Zone management</source>
+      <translation>ゾーン管理</translation>
+    </message>
+    <message>
+      <source>Zone name</source>
+      <translation>ゾーン名</translation>
+    </message>
+    <message>
+      <source>Field Interpolation</source>
+      <translation>フィールド補間</translation>
+    </message>
+    <message>
+      <source>Chosen</source>
+      <translation>選択済み</translation>
+    </message>
+    <message>
+      <source>Create a zone</source>
+      <translation>ゾーンの作成</translation>
+    </message>
+    <message>
+      <source>HOM_ZONE_NAME</source>
+      <translation>領域に名前を必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ZONE_LIMIT</source>
+      <translation>最大 %1 は %1 のミニよりも大きい必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ZONE_RAYON</source>
+      <translation>外側の半径は、内側の半径よりも大きい必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ZONE_EDIT_WINDOW_TITLE</source>
+      <translation>領域の編集</translation>
+    </message>
+    <message>
+      <source>Type of zone</source>
+      <translation>ゾーンのタイプ</translation>
+    </message>
+    <message>
+      <source>Box</source>
+      <translation>Box</translation>
+    </message>
+    <message>
+      <source>Sphere</source>
+      <translation>球</translation>
+    </message>
+    <message>
+      <source>Cylinder</source>
+      <translation>円筒</translation>
+    </message>
+    <message>
+      <source>Disk</source>
+      <translation>円盤</translation>
+    </message>
+    <message>
+      <source>Disk with hole</source>
+      <translation>穴付き円盤</translation>
+    </message>
+    <message>
+      <source>Pipe</source>
+      <translation>パイプ</translation>
+    </message>
+    <message>
+      <source>Coordinates</source>
+      <translation>座標</translation>
+    </message>
+    <message>
+      <source>Create an analytical boundary</source>
+      <translation>分析境界の作成</translation>
+    </message>
+    <message>
+      <source>Create a discrete boundary</source>
+      <translation>離散境界の作成</translation>
+    </message>
+    <message>
+      <source>Type of boundary</source>
+      <translation>境界のタイプ</translation>
+    </message>
+    <message>
+      <source>Torus</source>
+      <translation>環状体</translation>
+    </message>
+    <message>
+      <source>Radius</source>
+      <translation>半径</translation>
+    </message>
+    <message>
+      <source>Radius 1</source>
+      <translation>半径1</translation>
+    </message>
+    <message>
+      <source>Radius 2</source>
+      <translation>半径2</translation>
+    </message>
+    <message>
+      <source>External radius</source>
+      <translation>外半径</translation>
+    </message>
+    <message>
+      <source>Internal radius</source>
+      <translation>内半径</translation>
+    </message>
+    <message>
+      <source>Height</source>
+      <translation>高さ</translation>
+    </message>
+    <message>
+      <source>X axis</source>
+      <translation>X 軸</translation>
+    </message>
+    <message>
+      <source>Y axis</source>
+      <translation>Y 軸</translation>
+    </message>
+    <message>
+      <source>Z axis</source>
+      <translation>Z 軸</translation>
+    </message>
+    <message>
+      <source>R revolution</source>
+      <translation>R 回転</translation>
+    </message>
+    <message>
+      <source>Primary R</source>
+      <translation>主 R</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_NAME</source>
+      <translation>名前の国境に与えする必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_MESH</source>
+      <translation>1 つの枠を含むメッシュを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_CASE</source>
+      <translation>場合ファイルのメッシュが知られています。</translation>
+    </message>
+    <message>
+      <source>HOM_AXE</source>
+      <translation>軸は、ゼロ以外のベクトルでなければなりません。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_A_EDIT_WINDOW_TITLE</source>
+      <translation>分析のフロンティアの編集</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_D_EDIT_WINDOW_TITLE</source>
+      <translation>離散境界の編集</translation>
+    </message>
+    <message>
+      <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
+      <translation>選択したグループ</translation>
+    </message>
+    <message>
+      <source>The height must be positive.</source>
+      <translation>高さは正でなければなりません。</translation>
+    </message>
+    <message>
+      <source>The radius must be positive.</source>
+      <translation>半径は正でなければなりません。</translation>
+    </message>
+    <message>
+      <source>The axis must be a non 0 vector.</source>
+      <translation>軸は非 0 のベクトルでなければなりません。</translation>
+    </message>
+    <message>
+      <source>The angle must be included higher than 0 degree and lower than 90 degrees.</source>
+      <translation>角度は0 °よりも大きく 90 °未満である必要があります。</translation>
+    </message>
+    <message>
+      <source>The radius must be different.</source>
+      <translation>半径が異なる必要があります。</translation>
+    </message>
+    <message>
+      <source>The centers must be different.</source>
+      <translation>中心が異なる必要があります。</translation>
+    </message>
+    <message>
+      <source>The external radius must be higher than the internal radius.</source>
+      <translation>外部の半径は内部の半径より大きい必要があります。</translation>
+    </message>
+    <message>
+      <source>The X coordinates are not coherent.</source>
+      <translation>X座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The Y coordinates are not coherent.</source>
+      <translation>Y座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The Z coordinates are not coherent.</source>
+      <translation>Z座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The first coordinates are not coherent.</source>
+      <translation>最初の座標に論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The second coordinates are not coherent.</source>
+      <translation>2番目の座標に論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The orientation must be 1, 2 or 3.</source>
+      <translation>方向は1、2、3のどれかにする必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_0</source>
+      <translation>メッシュの解析</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_1</source>
+      <translation>少なくとも 1 つのオプションを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_2</source>
+      <translation>バランス シート分析結果をスタディ ツリーで、ファイル</translation>
+    </message>
+    <message>
+      <source>Filtering with groups</source>
+      <translation>グループでフィルタリング</translation>
+    </message>
+    <message>
+      <source>Selection of groups</source>
+      <translation>グループの選択</translation>
+    </message>
+    <message>
+      <source>Selected groups</source>
+      <translation>選択されたグループ</translation>
+    </message>
+    <message>
+      <source>Group</source>
+      <translation>グループ :</translation>
+    </message>
+    <message>
+      <source>Information on a mesh</source>
+      <translation>メッシュに関する情報</translation>
+    </message>
+    <message>
+      <source>Group size</source>
+      <translation>グループのサイズ</translation>
+    </message>
+    <message>
+      <source>Quality</source>
+      <translation>品質</translation>
+    </message>
+    <message>
+      <source>Connection</source>
+      <translation>接続</translation>
+    </message>
+    <message>
+      <source>Diametre</source>
+      <translation>直径</translation>
+    </message>
+    <message>
+      <source>Entanglement</source>
+      <translation>縺れ合い</translation>
+    </message>
+    <message>
+      <source>No change is allowed in a boundary. Ask for evolution.</source>
+      <translation>境界内に許可された変更はありません。旋回について尋ねます。</translation>
+    </message>
+    <message>
+      <source>This boundary is used in a case and cannot be deleted.</source>
+      <translation>この境界はケースで使用されており、削除できません。</translation>
+    </message>
+    <message>
+      <source>This hypothesis is used and cannot be deleted.</source>
+      <translation>このhypothesisは使用されており、削除できません。</translation>
+    </message>
+    <message>
+      <source>This iteration cannot be deleted.</source>
+      <translation>このイテレーションは削除できません。</translation>
+    </message>
+    <message>
+      <source>This zone is used in an hypothesis and cannot be deleted.</source>
+      <translation>このゾーンはhypothesisで使用されており、削除できません。</translation>
+    </message>
+    <message>
+      <source>The directory for the calculation cannot be cleared.</source>
+      <translation>計算用ディレクトリは削除できません。</translation>
+    </message>
+    <message>
+      <source>Starting point</source>
+      <translation>始点</translation>
+    </message>
+    <message>
+      <source>From an iteration</source>
+      <translation>イテレーションから</translation>
+    </message>
+    <message>
+      <source>From a case</source>
+      <translation>ケースから</translation>
+    </message>
+    <message>
+      <source>Iteration into the case</source>
+      <translation>ケースへのイテレーション</translation>
+    </message>
+    <message>
+      <source>Last iteration</source>
+      <translation>最後のイテレーション</translation>
+    </message>
+    <message>
+      <source>Iteration number</source>
+      <translation>イテレーション数</translation>
+    </message>
+    <message>
+      <source>The directory of the case does not exist.</source>
+      <translation>ケースのディレクトリは存在しません。</translation>
+    </message>
+    <message>
+      <source>The directory for the case cannot be modified because some iterations are already defined.</source>
+      <translation>いくつかのイテレーションが既に定義されているため、ケースのディレクトリを変更できません。</translation>
+    </message>
+    <message>
+      <source>The directory for the case cannot be reached.</source>
+      <translation>ケースのディレクトリに到達できません。</translation>
+    </message>
+    <message>
+      <source>The starting point for the case cannot be copied into the working directory.</source>
+      <translation>ケースの開始点は作業ディレクトリにコピーできません。</translation>
+    </message>
+    <message>
+      <source>The starting point for the case cannot be moved into the new directory.</source>
+      <translation>ケースの開始点は新しいディレクトリに移動できません。</translation>
+    </message>
+    <message>
+      <source>The directory of the case for the pursuit does not exist.</source>
+      <translation>追跡用ケースのディレクトリは存在しません。</translation>
+    </message>
+    <message>
+      <source>The directory of the iteration does not exist.</source>
+      <translation>イテレーションのディレクトリが存在しません。</translation>
+    </message>
+    <message>
+      <source>The number of iteration must be positive.</source>
+      <translation>イテレーション数は正である必要があります。</translation>
+    </message>
+    <message>
+      <source>Number of iteration</source>
+      <translation>イテレーション数</translation>
+    </message>
+    <message>
+      <source>Case</source>
+      <translation>ケース</translation>
+    </message>
+    <message>
+      <source>Mesh file</source>
+      <translation>メッシュファイル</translation>
+    </message>
+    <message>
+      <source>Constant</source>
+      <translation>定数</translation>
+    </message>
+    <message>
+      <source>Variable</source>
+      <translation>変数</translation>
+    </message>
+    <message>
+      <source>Type of schema</source>
+      <translation>スキーマタイプ</translation>
+    </message>
+    <message>
+      <source>Maximum of ...</source>
+      <translation>最大の...</translation>
+    </message>
+    <message>
+      <source>Iterations</source>
+      <translation>イテレーション</translation>
+    </message>
+    <message>
+      <source>Nodes</source>
+      <translation>節点</translation>
+    </message>
+    <message>
+      <source>Elements</source>
+      <translation>要素</translation>
+    </message>
+    <message>
+      <source>Test of convergence</source>
+      <translation>収束テスト</translation>
+    </message>
+    <message>
+      <source>Edit a file</source>
+      <translation>ファイルの編集</translation>
+    </message>
+    <message>
+      <source>Print</source>
+      <translation>印刷</translation>
+    </message>
+    <message>
+      <source>Invalid study context</source>
+      <translation>無効なスタディの内容</translation>
+    </message>
+    <message>
+      <source>HOM_YACS_EDIT_WINDOW_TITLE</source>
+      <translation>YACS スキーマ編集スキーマへんしゅう</translation>
+    </message>
+    <message>
+      <source>PREF_TAB_GENERAL</source>
+      <translation>一般的な</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION</source>
+      <translation>発行</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+      <translation>メッシュ入力</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+      <translation>メッシュ出力</translation>
+    </message>
+    <message>
+      <source>PREF_YACS</source>
+      <translation>YACS</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_MAX</source>
+      <translation>最大の数</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_MAX_ITER</source>
+      <translation>繰り返し</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_MAX_NODE</source>
+      <translation>節点</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_MAX_ELEM</source>
+      <translation>要素</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_CONVERGENCE</source>
+      <translation>収束</translation>
+    </message>
+    <message>
+      <source>PREF_YACS_TYPE_TEST</source>
+      <translation>テストタイプ</translation>
+    </message>
+  </context>
+</TS>
index 1858afed932773fe21c2637e82914ef1303c2ff3..08e2a4d27a5edc32408a1f48db2f423dd253780c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <qfiledialog.h>
 #include <qstring.h>
 #include <stdlib.h>
+#ifndef WIN32
 #include <unistd.h>
+#endif
 #include <sys/stat.h>
 
 
 #include "SalomeApp_Tools.h"
 
 using namespace std;
-extern "C"
-{
-#include <med.h>
-}
 
+#include <med.h>
 
 // ============================================================================
-QString HOMARD_QT_COMMUN::SelectionArbreEtude(QString commentaire, int grave )
+QString HOMARD_QT_COMMUN::SelectionArbreEtude(QString commentaire, int option )
 // ============================================================================
-// Regarde si l'objet selectionne correspond a un objet de tyoe
-// commentaire. si c'est le cas, retourne le nom de  cet objet,
-// sinon retourne une QString("")
-// Si grave = 0, ce n'est pas grave de ne rien trouver et pas de message
-// Si grave = 1, ce n'est pas grave de ne rien trouver mais on emet un message
+// Retourne l'objet selectionne dans l'arbre d'etudes
+// commentaire :
+// . si le commentaire est une chaine vide, on ne tient pas compte du type de l'objet
+//   et on retourne le nom de cet objet
+// . sinon :
+//   . si l'objet est du type defini par commentaire, retourne le nom de cet objet
+//   . sinon on retourne une QString("")
+// option :
+// . Si option = 0, ce n'est pas grave de ne rien trouver ; aucun message n'est emis
+// . Si option = 1, ce n'est pas grave de ne rien trouver mais on emet un message
 {
+//   MESSAGE("SelectionArbreEtude : commentaire = " << commentaire.toStdString().c_str() << " et option = " << option);
   int nbSel = HOMARD_UTILS::IObjectCount() ;
   if ( nbSel == 0 )
   {
-    if ( grave == 1 )
+    if ( option == 1 )
     {
       QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
-                                QObject::tr("HOM_SELECT_OBJECT_1") );
+                               QObject::tr("HOM_SELECT_OBJECT_1") );
     }
     return QString("");
   }
@@ -69,19 +74,25 @@ QString HOMARD_QT_COMMUN::SelectionArbreEtude(QString commentaire, int grave )
   Handle(SALOME_InteractiveObject) aIO = HOMARD_UTILS::firstIObject();
   if ( aIO->hasEntry() )
   {
+//     MESSAGE("aIO->getEntry() = " << aIO->getEntry());
     _PTR(Study) aStudy = HOMARD_UTILS::GetActiveStudyDocument();
     _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) );
     _PTR(GenericAttribute) anAttr;
     if (aSO->FindAttribute(anAttr, "AttributeComment") )
     {
-      _PTR(AttributeComment) attributComment = anAttr;
-      QString aComment= QString(attributComment->Value().data());
-      int iteration = aComment.lastIndexOf(commentaire);
-      if ( iteration !=0  )
+      if ( commentaire != "" )
       {
-        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                  QObject::tr("HOM_SELECT_OBJECT_3").arg(commentaire) );
-        return QString("");
+        _PTR(AttributeComment) attributComment = anAttr;
+        QString aComment= QString(attributComment->Value().data());
+//         MESSAGE("... aComment = " << aComment.toStdString().c_str());
+        int iaux = aComment.lastIndexOf(commentaire);
+//         MESSAGE("... iaux = " << iaux);
+        if ( iaux !=0  )
+        {
+          QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                    QObject::tr("HOM_SELECT_OBJECT_3").arg(commentaire) );
+          return QString("");
+        }
       }
       if (aSO->FindAttribute(anAttr, "AttributeName") )
       {
@@ -131,7 +142,7 @@ QString HOMARD_QT_COMMUN::SelectionCasEtude()
 }
 
 // =======================================================================
-QString HOMARD_QT_COMMUN::PushNomFichier(bool avertir)
+QString HOMARD_QT_COMMUN::PushNomFichier(bool avertir, QString TypeFichier)
 // =======================================================================
 // Gestion les boutons qui permettent  de
 // 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun
@@ -139,19 +150,31 @@ QString HOMARD_QT_COMMUN::PushNomFichier(bool avertir)
 // 2) retourne le nom du fichier asocie a l objet
 //    selectionne dans l arbre d etude
 {
-  MESSAGE("HOMARD_QT_COMMUN::PushNomFichier");
-  QString aFile=QString::null;
+//   MESSAGE("PushNomFichier avec avertir "<<avertir<<" et TypeFichier = "<<TypeFichier.toStdString().c_str());
+  QString aFile = QString::null;
+//
+  // A. Filtre
+  QString filtre  ;
+//
+  if ( TypeFichier == "med" )     { filtre = QString("Med") ; }
+  else if ( TypeFichier == "py" ) { filtre = QString("Python") ; }
+  else                            { filtre = TypeFichier ; }
+//
+  if ( TypeFichier != "" ) { filtre += QString(" files (*.") + TypeFichier + QString(");;") ; }
+//
+  filtre += QString("all (*) ") ;
+//
+  // B. Selection
   int nbSel = HOMARD_UTILS::IObjectCount() ;
+//   MESSAGE("nbSel ="<<nbSel);
+  // B.1. Rien n'est selectionne
   if ( nbSel == 0 )
   {
-    aFile = QFileDialog::getOpenFileName(0,QString("File Selection"),QString("") ,QString("Med files (*.med);;all (*) ") );
+//     aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), QString("Med files (*.med);;all (*) ") );
+    aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), filtre );
   }
-  if (nbSel > 1)
-  {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                              QObject::tr("HOM_SELECT_FILE_2") );
-  }
-  if (nbSel == 1)
+  // B.2. Un objet est selectionne
+  else if (nbSel == 1)
   {
     Handle(SALOME_InteractiveObject) aIO = HOMARD_UTILS::firstIObject();
     if ( aIO->hasEntry() )
@@ -178,20 +201,20 @@ QString HOMARD_QT_COMMUN::PushNomFichier(bool avertir)
     {
       if ( avertir ) {
         QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
-                                QObject::tr("HOM_SELECT_STUDY") );
-      }
-      aFile = QFileDialog::getOpenFileName();
-      if (!aFile.isEmpty())
-      {
-        aFile=aFile;
+                                 QObject::tr("HOM_SELECT_STUDY") );
       }
+      aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), filtre );
     }
   }
-  return aFile;
+  // B.3. Bizarre
+  else
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SELECT_FILE_2") );
+  }
 
+  return aFile;
 }
-
-
 // =======================================================================
 int HOMARD_QT_COMMUN::OuvrirFichier(QString aFile)
 // =======================================================================
@@ -210,21 +233,40 @@ int HOMARD_QT_COMMUN::OuvrirFichier(QString aFile)
 QString HOMARD_QT_COMMUN::LireNomMaillage(QString aFile)
 // ========================================================
 {
-  med_int medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
-  med_int numberOfMeshes = MEDnMesh(medIdt) ;
-  if (numberOfMeshes == 0 )
-  {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                              QObject::tr("HOM_MED_FILE_2") );
-  }
-  if (numberOfMeshes > 1 )
+  QString nomMaillage = "" ;
+  int erreur = 0 ;
+  med_int medIdt ;
+  while ( erreur == 0 )
   {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                              QObject::tr("HOM_MED_FILE_3") );
+    //  Ouverture du fichier
+    medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+    med_int numberOfMeshes = MEDnMesh(medIdt) ;
+    if (numberOfMeshes == 0 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_2") );
+      erreur = 2 ;
+      break ;
+    }
+    if (numberOfMeshes > 1 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_3") );
+      erreur = 3 ;
+      break ;
+    }
+
+    nomMaillage = HOMARD_QT_COMMUN::LireNomMaillage(medIdt,1);
+    break ;
   }
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
 
-  QString nomMaillage= HOMARD_QT_COMMUN::LireNomMaillage(medIdt,1);
-  MEDfileClose(medIdt);
   return nomMaillage;
 }
 // =======================================================================
@@ -257,15 +299,13 @@ QString HOMARD_QT_COMMUN::LireNomMaillage(int medIdt ,int meshId)
                           axisname,
                           axisunit);
 
-  if ( aRet < 0 )
-  {
-  QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                            QObject::tr("HOM_MED_FILE_4") );
-  }
-  else
-  {
-    NomMaillage=QString(meshname);
-  }
+  if ( aRet < 0 ) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), \
+                                              QObject::tr("HOM_MED_FILE_4") );  }
+  else            { NomMaillage=QString(meshname); }
+
+  delete[] axisname ;
+  delete[] axisunit ;
+
   return NomMaillage;
 }
 
@@ -276,54 +316,61 @@ std::list<QString> HOMARD_QT_COMMUN::GetListeChamps(QString aFile)
 {
 // Il faut voir si plusieurs maillages
 
-  MESSAGE("HOMARD_QT_COMMUN::GetListeChamps");
-  std::list<QString> ListeChamp;
+  MESSAGE("GetListeChamps");
+  std::list<QString> ListeChamp ;
 
-  char *comp, *unit;
-  char nomcha  [MED_NAME_SIZE+1];
-  char meshname[MED_NAME_SIZE+1];
-  med_field_type typcha;
-  med_int ncomp;
-  med_bool local;
-  med_int nbofcstp;
-
-  SCRUTE(aFile.toStdString());
-  med_int medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
-  if ( medIdt < 0 ) { return ListeChamp; }
-
-  // Le fichier Med est lisible
-  // Lecture du maillage
-
-  // Lecture du nombre de champs
-  med_int ncha = MEDnField(medIdt) ;
-  if (ncha < 1 )
-  {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                            QObject::tr("HOM_MED_FILE_5") );
-    MEDfileClose(medIdt);
-    return ListeChamp;
-  }
+  med_err erreur = 0 ;
+  med_int medIdt ;
 
-  for (int i=0; i< ncha; i++)
+  while ( erreur == 0 )
   {
-    /* Lecture du type du champ, des noms des composantes et du nom de l'unite*/
-    ncomp = MEDfieldnComponent(medIdt,i+1);
-    comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
-    unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
-    char dtunit[MED_SNAME_SIZE+1];
-    if ( MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) < 0 )
+    // Ouverture du fichier
+    SCRUTE(aFile.toStdString());
+    medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+  // Lecture du nombre de champs
+    med_int ncha = MEDnField(medIdt) ;
+    if (ncha < 1 )
     {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QObject::tr("HOM_MED_FILE_6") );
-      MEDfileClose(medIdt);
-      return ListeChamp;
+                                QObject::tr("HOM_MED_FILE_5") );
+      erreur = 2 ;
+      break ;
     }
-
-    ListeChamp.push_back(QString(nomcha));
-    free(comp);
-    free(unit);
+  // Lecture des caracteristiques des champs
+    for (int i=0; i< ncha; i++)
+    {
+//       Lecture du nombre de composantes
+      med_int ncomp = MEDfieldnComponent(medIdt,i+1);
+//       Lecture du type du champ, des noms des composantes et du nom de l'unite
+      char nomcha  [MED_NAME_SIZE+1];
+      char meshname[MED_NAME_SIZE+1];
+      char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char dtunit[MED_SNAME_SIZE+1];
+      med_bool local;
+      med_field_type typcha;
+      med_int nbofcstp;
+      erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ;
+      free(comp);
+      free(unit);
+      if ( erreur < 0 )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr("HOM_MED_FILE_6") );
+        break ;
+      }
+      ListeChamp.push_back(QString(nomcha));
+    }
+    break ;
   }
-  MEDfileClose(medIdt);
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
   return ListeChamp;
 }
 
@@ -336,61 +383,71 @@ std::list<QString> HOMARD_QT_COMMUN::GetListeComposants(QString aFile, QString a
 
   std::list<QString> ListeComposants;
 
-  char *comp, *unit;
-  char nomcha  [MED_NAME_SIZE+1];
-  char meshname[MED_NAME_SIZE+1];
-  med_field_type typcha;
-  med_int ncomp;
-  med_bool local;
-  med_int nbofcstp;
-
-  int medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
-  if ( medIdt < 0 ) { return ListeComposants; }
-
+  med_err erreur = 0 ;
+  med_int medIdt ;
 
-  // Lecture du nombre de champs
-  med_int ncha = MEDnField(medIdt) ;
-  if (ncha < 1 )
-  {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                            QObject::tr("HOM_MED_FILE_5") );
-    MEDfileClose(medIdt);
-    return ListeComposants;
-  }
-
-  for (int i=0; i< ncha; i++)
+  while ( erreur == 0 )
   {
-    /* Lecture du type du champ, des noms des composantes et du nom de l'unite*/
-    ncomp = MEDfieldnComponent(medIdt,i+1);
-    comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
-    unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
-    char dtunit[MED_SNAME_SIZE+1];
-
-    if ( MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) < 0 )
+    // Ouverture du fichier
+    SCRUTE(aFile.toStdString());
+    medIdt = HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
     {
-      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QObject::tr("HOM_MED_FILE_6") );
-      MEDfileClose(medIdt);
-      return ListeComposants;
+      erreur = 1 ;
+      break ;
     }
-    
-    if ( QString(nomcha) != aChamp ) {
-      free(comp);
-      free(unit);
-      continue;
+  // Lecture du nombre de champs
+    med_int ncha = MEDnField(medIdt) ;
+    if (ncha < 1 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_5") );
+      erreur = 2 ;
+      break ;
     }
-
-    for (int j = 0; j <ncomp; j++)
+  // Lecture des caracteristiques des champs
+    for (int i=0; i< ncha; i++)
     {
-      char cible[MED_SNAME_SIZE +1];
-      strncpy(cible,comp+j*MED_SNAME_SIZE,MED_SNAME_SIZE );
-      cible[MED_SNAME_SIZE ]='\0';
-      ListeComposants.push_back(QString(cible));
+//       Lecture du nombre de composantes
+      med_int ncomp = MEDfieldnComponent(medIdt,i+1);
+//       Lecture du type du champ, des noms des composantes et du nom de l'unite
+      char nomcha  [MED_NAME_SIZE+1];
+      char meshname[MED_NAME_SIZE+1];
+      char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char dtunit[MED_SNAME_SIZE+1];
+      med_bool local;
+      med_field_type typcha;
+      med_int nbofcstp;
+      erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ;
+      free(unit);
+      if ( erreur < 0 )
+      {
+        free(comp);
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr("HOM_MED_FILE_6") );
+        break ;
+      }
+      // Lecture des composantes si c'est le bon champ
+      if ( QString(nomcha) == aChamp )
+      {
+        for (int j = 0; j <ncomp; j++)
+        {
+          char cible[MED_SNAME_SIZE +1];
+          strncpy(cible,comp+j*MED_SNAME_SIZE,MED_SNAME_SIZE );
+          cible[MED_SNAME_SIZE ]='\0';
+          ListeComposants.push_back(QString(cible));
+        }
+      }
+      // Menage
+      free(comp);
+      // Sortie si c'est bon
+      if ( QString(nomcha) == aChamp ) { break ; }
     }
-    break;
+    break ;
   }
-  free(comp);
-  free(unit);
-  MEDfileClose(medIdt);
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
   return ListeComposants;
 }
index f5fe6d3bc15f843f9c3e1479841b8da1283ef1bc..c64f4907d2d10291275ef78092e09fc06e28f008 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef HOMARDQTCOMMUN_H
 #define HOMARDQTCOMMUN_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include "SALOME_Selection.h"
@@ -38,17 +39,17 @@ class QComboBox;
 
 namespace HOMARD_QT_COMMUN
 {
-    QString PushNomFichier(bool avertir=true);
-    QString LireNomMaillage(int Medidt,int MeshId);
-    QString LireNomMaillage(QString aFile);
+    HOMARD_EXPORT QString PushNomFichier(bool avertir, QString TypeFichier="");
+    HOMARD_EXPORT QString LireNomMaillage(int Medidt,int MeshId);
+    HOMARD_EXPORT QString LireNomMaillage(QString aFile);
 
-    int     OuvrirFichier(QString aFile);
+    HOMARD_EXPORT int     OuvrirFichier(QString aFile);
 
-    std::list<QString> GetListeChamps(QString aFile);
-    std::list<QString> GetListeComposants(QString aFile, QString aChamp);
+    HOMARD_EXPORT std::list<QString> GetListeChamps(QString aFile);
+    HOMARD_EXPORT std::list<QString> GetListeComposants(QString aFile, QString aChamp);
 
-    QString SelectionArbreEtude(QString commentaire, int grave );
-    QString SelectionCasEtude();
+    HOMARD_EXPORT QString SelectionArbreEtude(QString commentaire, int grave );
+    HOMARD_EXPORT QString SelectionCasEtude();
 
 };
 
diff --git a/src/HOMARDGUI/IterInfo.ui b/src/HOMARDGUI/IterInfo.ui
new file mode 100644 (file)
index 0000000..04b2664
--- /dev/null
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IterInfo</class>
+ <widget class="QDialog" name="IterInfo">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>420</width>
+    <height>220</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Information on a mesh</string>
+  </property>
+  <property name="autoFillBackground">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0" rowspan="2" colspan="2">
+    <widget class="QGroupBox" name="GBOptions">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="CBQuality">
+        <property name="text">
+         <string>Quality</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="CBConnection">
+        <property name="text">
+         <string>Connection</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="CBDiametre">
+        <property name="text">
+         <string>Diametre</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QCheckBox" name="CBBlockSize">
+        <property name="text">
+         <string>Group size</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" colspan="2">
+       <widget class="QCheckBox" name="CBEntanglement">
+        <property name="text">
+         <string>Entanglement</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QGroupBox" name="GroupButtons">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>9</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="0" column="4">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
+         <string>Help</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
+         <string>Apply</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
+         <string>OK</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
+         <string>Cancel</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/HOMARDGUI/Makefile.am b/src/HOMARDGUI/Makefile.am
deleted file mode 100644 (file)
index a1b6461..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# Author :
-# Modified by : Alexander BORODIN (OCN) - autotools usage
-#
-# header files
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-salomeinclude_HEADERS =       \
-       MonCreateBoundaryAn.h \
-       CreateBoundaryAn.h    \
-       MonEditBoundaryAn.h   \
-       MonCreateBoundaryDi.h \
-       CreateBoundaryDi.h    \
-       MonEditBoundaryDi.h   \
-       MonCreateCase.h       \
-       CreateCase.h          \
-       MonEditCase.h         \
-       MonCreateZone.h       \
-       CreateZone.h          \
-       MonEditZone.h         \
-       MonCreateHypothesis.h \
-       CreateHypothesis.h    \
-       MonEditHypothesis.h   \
-       MonCreateListGroup.h  \
-       CreateListGroup.h     \
-       MonEditListGroup.h    \
-       MonCreateIteration.h  \
-       CreateIteration.h     \
-       MonEditIteration.h    \
-       HOMARDGUI.h           \
-       HOMARDGUI_Utils.h     \
-       EditFile.h            \
-       MonEditFile.h         \
-       HomardQtCommun.h
-
-
-# Libraries targets
-lib_LTLIBRARIES = libHOMARD.la
-
-dist_libHOMARD_la_SOURCES =     \
-       HOMARDGUI.cxx           \
-       HOMARDGUI_Utils.cxx     \
-       MonCreateBoundaryAn.cxx \
-       MonEditBoundaryAn.cxx \
-       MonCreateBoundaryDi.cxx \
-       MonEditBoundaryDi.cxx \
-       MonCreateCase.cxx       \
-       MonEditCase.cxx         \
-       MonCreateHypothesis.cxx \
-       MonEditHypothesis.cxx   \
-       MonCreateListGroup.cxx \
-       MonEditListGroup.cxx \
-       MonCreateIteration.cxx  \
-       MonEditIteration.cxx    \
-       MonCreateZone.cxx       \
-       MonEditZone.cxx         \
-       MonEditFile.cxx         \
-       HomardQtCommun.cxx
-
-# MOC pre-processing
-MOC_FILES =                         \
-       HOMARDGUI_moc.cxx           \
-       MonCreateBoundaryAn_moc.cxx \
-       MonEditBoundaryAn_moc.cxx   \
-       MonCreateBoundaryDi_moc.cxx \
-       MonEditBoundaryDi_moc.cxx   \
-       MonCreateCase_moc.cxx       \
-       MonEditCase_moc.cxx         \
-       MonCreateZone_moc.cxx       \
-       MonEditZone_moc.cxx         \
-       MonCreateHypothesis_moc.cxx \
-       MonEditHypothesis_moc.cxx   \
-       MonCreateListGroup_moc.cxx  \
-       MonEditListGroup_moc.cxx    \
-       MonCreateIteration_moc.cxx  \
-       MonEditIteration_moc.cxx    \
-       MonEditFile_moc.cxx
-
-nodist_libHOMARD_la_SOURCES = $(MOC_FILES)
-
-libHOMARD_la_CPPFLAGS =          \
-       $(QT_INCLUDES)           \
-       $(CAS_CPPFLAGS)          \
-       $(PYTHON_INCLUDES)       \
-       $(MED3_INCLUDES)         \
-       $(HDF5_INCLUDES)         \
-       $(BOOST_CPPFLAGS)        \
-       $(CORBA_CXXFLAGS)        \
-       $(CORBA_INCLUDES)        \
-       $(KERNEL_CXXFLAGS)       \
-       $(GUI_CXXFLAGS)          \
-       -I$(srcdir)/../HOMARD    \
-       -I$(srcdir)/../HOMARD_I  \
-       -I$(top_builddir)/idl    \
-       -I$(top_builddir)        \
-       -I$(VISU_ROOT_DIR)/include/salome  \
-       -I$(MED_ROOT_DIR)/include/salome   \
-       -I$(top_builddir)/adm_local/unix
-
-libHOMARD_la_LDFLAGS  =                 \
-       ../../idl/libSalomeIDLHOMARD.la \
-       ../HOMARD_I/libHOMARDEngine.la  \
-       $(KERNEL_LDFLAGS)               \
-       $(MED3_LIBS)                    \
-        -lSalomeLifeCycleCORBA          \
-       $(GUI_LDFLAGS)                  \
-       -lSalomeApp                     \
-        -lSalomePyQtGUI
-
-# resources files
-nodist_salomeres_DATA =  \
-       HOMARD_msg_en.qm \
-       HOMARD_msg_fr.qm
-
-UI_FILES = \
-CreateBoundaryAn.ui \
-CreateBoundaryDi.ui \
-CreateCase.ui \
-CreateHypothesis.ui \
-CreateIteration.ui \
-CreateListGroup.ui \
-CreateZone.ui \
-EditFile.ui
-
-EXTRA_DIST += $(UI_FILES)
diff --git a/src/HOMARDGUI/MeshInfo.ui b/src/HOMARDGUI/MeshInfo.ui
new file mode 100644 (file)
index 0000000..c3e55aa
--- /dev/null
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MeshInfo</class>
+ <widget class="QDialog" name="MeshInfo">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>536</width>
+    <height>372</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Information on a mesh</string>
+  </property>
+  <property name="autoFillBackground">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0" colspan="2">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="Name">
+       <property name="text">
+        <string>Name</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LECaseName">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" colspan="2">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="Directory">
+       <property name="text">
+        <string>Directory</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="PushDir">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LEDirName">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>18</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="3" column="0" colspan="2">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="Mesh_2">
+       <property name="text">
+        <string>Mesh</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="PushFichier">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LEFileName">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="4" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>1</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="5" column="0">
+    <widget class="QGroupBox" name="GBOptions">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="CBQuality">
+        <property name="text">
+         <string>Quality</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="CBConnection">
+        <property name="text">
+         <string>Connection</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="CBDiametre">
+        <property name="text">
+         <string>Diametre</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QCheckBox" name="CBBlockSize">
+        <property name="text">
+         <string>Group size</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" colspan="2">
+       <widget class="QCheckBox" name="CBEntanglement">
+        <property name="text">
+         <string>Entanglement</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="6" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="7" column="0">
+    <widget class="QGroupBox" name="GroupButtons">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>9</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="0" column="4">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
+         <string>Help</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
+         <string>Apply</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
+         <string>OK</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
+         <string>Cancel</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="7" column="1">
+    <spacer name="spacer_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>128</width>
+       <height>25</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
index 925e6978c51eba3d06e4f45aa284b2ab33b452f3..92a86fa344889bbe994fef3fab02c5eb0a744382 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateBoundaryAn.h"
 #include "MonCreateCase.h"
 
@@ -36,9 +34,13 @@ using namespace std;
 #include <SUIT_Session.h>
 #include <SUIT_ViewManager.h>
 
+#include "math.h"
+#define PI 3.141592653589793
+
+using namespace std;
 // ------------------------------------------------------------------------------------------------------------------------
 MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal,
-                             HOMARD::HOMARD_Gen_var myHomardGen,
+                             HOMARD::HOMARD_Gen_var myHomardGen0,
                              QString caseName) :
 // ------------------------------------------------------------------------------------------------------------------------------
 /* Constructs a MonCreateBoundaryAn
@@ -47,49 +49,70 @@ MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent, bool modal,
 */
     QDialog(0), Ui_CreateBoundaryAn(),
     _parent(parent),
-    _aBoundaryAnName (""),
+    _aName (""),
     _aCaseName(caseName),
-    _BoundaryType(1),
+    _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0),
+    _Type(1),
     _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
     _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
     _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
-    _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0),
+    _BoundaryAnXcone1(0), _BoundaryAnYcone1(0), _BoundaryAnZcone1(0), _BoundaryAnRayon1(0),
+    _BoundaryAnXcone2(0), _BoundaryAnYcone2(0), _BoundaryAnZcone2(0), _BoundaryAnRayon2(0),
+    _BoundaryAnXaxisCone(0), _BoundaryAnYaxisCone(0), _BoundaryAnZaxisCone(0),
+    _BoundaryAngle(0),
+    _BoundaryAnToreXcentre(0), _BoundaryAnToreYcentre(0), _BoundaryAnToreZcentre(0),
+    _BoundaryAnToreXaxe(0), _BoundaryAnToreYaxe(0), _BoundaryAnToreZaxe(0),
+    _BoundaryAnToreRRev(0), _BoundaryAnToreRPri(0),
     Chgt (false)
     {
       MESSAGE("Constructeur") ;
-      _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
       setupUi(this);
       setModal(modal);
 
     //  Gestion des icones
+      QPixmap pix ;
+      QIcon IS ;
       SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
-      QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
-      QIcon IS=QIcon(pix);
+      pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
+      IS=QIcon(pix);
       RBSphere->setIcon(IS);
-      QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
-      QIcon IS2=QIcon(pix2);
-      RBCylindre->setIcon(IS2);
+      pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
+      IS=QIcon(pix);
+      RBCylindre->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "cone.png" );
+      IS=QIcon(pix);
+      RBCone->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
+      IS=QIcon(pix);
+      RB_Def_angle->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
+      IS=QIcon(pix);
+      RB_Def_radius->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "toruspointvector.png" );
+      IS=QIcon(pix);
+      RBTore->setIcon(IS);
 
       InitConnect( );
 
-      SetNewBoundaryAnName() ;
+      SetNewName() ;
       InitValBoundaryAn();          // Cherche les valeurs de la boite englobante le maillage
       InitMinMax();                 // Initialise les bornes des boutons
       SetCylinder();                // Propose un cylindre en premier choix
     }
 // --------------------------------------------------------------------------------------------------------------
 MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent,
-                             HOMARD::HOMARD_Gen_var myHomardGen,
+                             HOMARD::HOMARD_Gen_var myHomardGen0,
                              QString caseName):
 // --------------------------------------------------------------------------------------------------------------
 // Constructeur appele par MonEditBoundaryAn
 //
     QDialog(0), Ui_CreateBoundaryAn(),
-     _myHomardGen(myHomardGen),
+     myHomardGen(myHomardGen0),
     _parent(parent),
-    _aBoundaryAnName (""),
+    _aName (""),
     _aCaseName(caseName),
-    _BoundaryType(1),
+    _Type(1),
     _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
     _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
     // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas
@@ -106,6 +129,15 @@ MonCreateBoundaryAn::MonCreateBoundaryAn(MonCreateCase* parent,
       QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
       QIcon IS2=QIcon(pix2);
       RBCylindre->setIcon(IS2);
+      QPixmap pix3 = resMgr->loadPixmap( "HOMARD", "cone.png" );
+      QIcon IS3=QIcon(pix3);
+      RBCone->setIcon(IS3);
+      QPixmap pix4 = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
+      QIcon IS4=QIcon(pix4);
+      RB_Def_angle->setIcon(IS4);
+      QPixmap pix5 = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
+      QIcon IS5=QIcon(pix5);
+      RB_Def_radius->setIcon(IS5);
       setModal(true);
       InitConnect();
     }
@@ -120,8 +152,12 @@ MonCreateBoundaryAn::~MonCreateBoundaryAn()
 void MonCreateBoundaryAn::InitConnect()
 // ------------------------------------------------------------------------
 {
-    connect( RBCylindre,   SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
-    connect( RBSphere,     SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
+    connect( RBCylindre,    SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
+    connect( RBSphere,      SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
+    connect( RBCone,        SIGNAL(clicked()) , this, SLOT(SetCone()) ) ;
+    connect( RB_Def_radius, SIGNAL(clicked()) , this, SLOT(SetConeR()) );
+    connect( RB_Def_angle,  SIGNAL(clicked()) , this, SLOT(SetConeA()) );
+    connect( RBTore,        SIGNAL(clicked()) , this, SLOT(SetTore()) ) ;
     connect( buttonOk,     SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
     connect( buttonApply,  SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
     connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
@@ -136,7 +172,7 @@ void MonCreateBoundaryAn::InitValBoundaryAn()
 //
     if (_aCaseName == QString("")) { return; }
 
-    HOMARD::HOMARD_Cas_var aCas = _myHomardGen->GetCas(_aCaseName.toStdString().c_str());
+    HOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase(_aCaseName.toStdString().c_str());
     HOMARD::extrema_var  MesExtremes = aCas->GetBoundingBox();
     int num = MesExtremes->length() ;
     ASSERT(num == 10);
@@ -164,20 +200,99 @@ void MonCreateBoundaryAn::InitValBoundaryAn()
 void MonCreateBoundaryAn::InitMinMax()
 // ------------------------------------------------------------------------
 {
-// en X
+  // Cylindre
+  // . X du centre
+  SpinBox_Xcent->setValue(_Xcentre);
+  SpinBox_Xcent->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBox_Ycent->setValue(_Ycentre);
+  SpinBox_Ycent->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBox_Zcent->setValue(_Zcentre);
+  SpinBox_Zcent->setSingleStep(_Zincr);
+  // . X de l'axe
+  SpinBox_Xaxis->setValue(0.);
   SpinBox_Xaxis->setSingleStep(0.1);
-  SpinBox_Xcentre->setSingleStep(_Xincr);
-//en Y
+  // . Y de l'axe
+  SpinBox_Yaxis->setValue(0.);
   SpinBox_Yaxis->setSingleStep(0.1);
-  SpinBox_Ycentre->setSingleStep(_Yincr);
-//en Z
+  // . Z de l'axe
+  SpinBox_Zaxis->setValue(1.);
   SpinBox_Zaxis->setSingleStep(0.1);
-  SpinBox_Zcentre->setSingleStep(_Zincr);
-// Rayon
+  // . Rayon
+  SpinBox_Radius->setValue(_Rayon);
   SpinBox_Radius->setSingleStep(_Rayon/10.);
-  SpinBox_Radius->setMinimum(0.);
+
+  // Sphere
+  // . X du centre
+  SpinBox_Xcentre->setValue(_Xcentre);
+  SpinBox_Xcentre->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBox_Ycentre->setValue(_Ycentre);
+  SpinBox_Ycentre->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBox_Zcentre->setValue(_Zcentre);
+  SpinBox_Zcentre->setSingleStep(_Zincr);
+  // . Rayon
+  SpinBox_Rayon->setValue(_Rayon);
   SpinBox_Rayon->setSingleStep(_Rayon/10.);
-  SpinBox_Rayon->setMinimum(0.);
+
+  // Cone en rayons
+  // . X des centres
+  _BoundaryAnXcone1 = _Xcentre ;
+  SpinBox_Cone_X1->setSingleStep(_Xincr);
+  _BoundaryAnXcone2 = _Xcentre ;
+  SpinBox_Cone_X2->setSingleStep(_Xincr);
+  // . Y des centres
+  _BoundaryAnYcone1 = _Ycentre ;
+  SpinBox_Cone_Y1->setSingleStep(_Yincr);
+  _BoundaryAnYcone2 = _Ycentre ;
+  SpinBox_Cone_Y2->setSingleStep(_Yincr);
+  // . Z des centres
+  _BoundaryAnZcone1 = _Zmin ;
+  SpinBox_Cone_Z1->setSingleStep(_Zincr);
+  _BoundaryAnZcone2 = _Zmax ;
+  SpinBox_Cone_Z2->setSingleStep(_Zincr);
+  // . Rayons/Angles
+  _BoundaryAnRayon1 = 0. ;
+  _BoundaryAnRayon2 = _Rayon ;
+  SpinBox_Cone_V2->setSingleStep(_Rayon/10.);
+
+  // Cone en angle
+  convertRayonAngle(1) ;
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+
+  // Tore
+  // . X du centre
+  SpinBoxToreXcent->setValue(_Xcentre);
+  SpinBoxToreXcent->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBoxToreYcent->setValue(_Ycentre);
+  SpinBoxToreYcent->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBoxToreZcent->setValue(_Zcentre);
+  SpinBoxToreZcent->setSingleStep(_Zincr);
+  // . X de l'axe
+  SpinBoxToreXaxe->setValue(0.);
+  SpinBoxToreXaxe->setSingleStep(0.1);
+  // . Y de l'axe
+  SpinBoxToreYaxe->setValue(0.);
+  SpinBoxToreYaxe->setSingleStep(0.1);
+  // . Z de l'axe
+  SpinBoxToreZaxe->setValue(1.);
+  SpinBoxToreZaxe->setSingleStep(0.1);
+  // . Rayon de revolution
+  SpinBoxToreRRev->setValue(_Rayon);
+  SpinBoxToreRRev->setSingleStep(_Rayon/10.);
+  // . Rayon primaire
+  SpinBoxToreRPri->setValue(_Rayon/3.);
+  SpinBoxToreRPri->setSingleStep(_Rayon/20.);
 }
 // ------------------------------------------------------------------------
 bool MonCreateBoundaryAn::PushOnApply()
@@ -185,24 +300,23 @@ bool MonCreateBoundaryAn::PushOnApply()
 // Appele lorsque l'un des boutons Ok ou Apply est presse
 //
 {
-  std::cerr << LEBoundaryName->text().trimmed().toStdString() << std::endl;
-  if (LEBoundaryName->text().trimmed()=="")
+  if (LEName->text().trimmed()=="")
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_BOUN_NAME") );
     return false;
   }
 
-  switch (_BoundaryType)
+  switch (_Type)
   {
       case 1 : // il s agit d un cylindre
       {
-        if ((_BoundaryAnXcentre != SpinBox_Xcent->value())  or
-            (_BoundaryAnYcentre != SpinBox_Ycent->value())  or
-            (_BoundaryAnZcentre != SpinBox_Zcent->value())  or
-            (_BoundaryAnRayon   != SpinBox_Radius->value()) or
-            (_BoundaryAnXaxis   != SpinBox_Xaxis->value()) or
-            (_BoundaryAnYaxis   != SpinBox_Yaxis->value()) or
+        if ((_BoundaryAnXcentre != SpinBox_Xcent->value())  ||
+            (_BoundaryAnYcentre != SpinBox_Ycent->value())  ||
+            (_BoundaryAnZcentre != SpinBox_Zcent->value())  ||
+            (_BoundaryAnRayon   != SpinBox_Radius->value()) ||
+            (_BoundaryAnXaxis   != SpinBox_Xaxis->value()) ||
+            (_BoundaryAnYaxis   != SpinBox_Yaxis->value()) ||
             (_BoundaryAnZaxis   != SpinBox_Zaxis->value()) )
         {
           Chgt = true;
@@ -213,22 +327,15 @@ bool MonCreateBoundaryAn::PushOnApply()
           _BoundaryAnYcentre=SpinBox_Ycent->value();
           _BoundaryAnZcentre=SpinBox_Zcent->value();
           _BoundaryAnRayon=SpinBox_Radius->value();
-          double daux = _BoundaryAnXaxis*_BoundaryAnXaxis + _BoundaryAnYaxis*_BoundaryAnYaxis + _BoundaryAnZaxis*_BoundaryAnZaxis ;
-          if ( daux < 0.0000001 )
-          {
-            QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                      QObject::tr("HOM_AXE") );
-            return false;
-          }
         }
         break;
       }
 
       case 2 : // il s agit d une sphere
       {
-        if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) or
-            (_BoundaryAnYcentre != SpinBox_Ycentre->value()) or
-            (_BoundaryAnZcentre != SpinBox_Zcentre->value()) or
+        if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) ||
+            (_BoundaryAnYcentre != SpinBox_Ycentre->value()) ||
+            (_BoundaryAnZcentre != SpinBox_Zcentre->value()) ||
             (_BoundaryAnRayon   != SpinBox_Rayon->value())  )
         {
            Chgt = true;
@@ -239,9 +346,82 @@ bool MonCreateBoundaryAn::PushOnApply()
         }
         break;
       }
-  }
+
+      case 3 : // il s agit d un cone defini par un axe et un angle
+      {
+        if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value())  ||
+            (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value())  ||
+            (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value())  ||
+            (_BoundaryAnXorigCone != SpinBox_Cone_X2->value())  ||
+            (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value())  ||
+            (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value())  ||
+            (_BoundaryAngle       != SpinBox_Cone_V1->value()) )
+        {
+           Chgt = true;
+          _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
+          _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
+          _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
+          _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
+          _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
+          _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
+          _BoundaryAngle       = SpinBox_Cone_V1->value() ;
+        }
+        break;
+      }
+
+      case 4 : // il s agit d un cone defini par les 2 rayons
+      {
+        if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value())  ||
+            (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value())  ||
+            (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value())  ||
+            (_BoundaryAnRayon1 != SpinBox_Cone_V1->value())  ||
+            (_BoundaryAnXcone2 != SpinBox_Cone_X2->value())  ||
+            (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value())  ||
+            (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value())  ||
+            (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
+        {
+           Chgt = true;
+          _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
+          _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
+          _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
+          _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
+          _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
+          _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
+          _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
+          _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
+        }
+        break;
+      }
+      case 5 : // il s agit d un tore
+      {
+        if ((_BoundaryAnToreXcentre != SpinBoxToreXcent->value())  ||
+            (_BoundaryAnToreYcentre != SpinBoxToreYcent->value())  ||
+            (_BoundaryAnToreZcentre != SpinBoxToreZcent->value())  ||
+            (_BoundaryAnToreRRev   != SpinBoxToreRRev->value()) ||
+            (_BoundaryAnToreRPri   != SpinBoxToreRPri->value()) ||
+            (_BoundaryAnToreXaxe   != SpinBoxToreXaxe->value()) ||
+            (_BoundaryAnToreYaxe   != SpinBoxToreYaxe->value()) ||
+            (_BoundaryAnToreZaxe   != SpinBoxToreZaxe->value()) )
+        {
+          Chgt = true;
+          _BoundaryAnToreXcentre= SpinBoxToreXcent->value();
+          _BoundaryAnToreYcentre= SpinBoxToreYcent->value();
+          _BoundaryAnToreZcentre= SpinBoxToreZcent->value();
+          _BoundaryAnToreRRev=SpinBoxToreRRev->value();
+          _BoundaryAnToreRPri=SpinBoxToreRPri->value();
+          _BoundaryAnToreXaxe=SpinBoxToreXaxe->value();
+          _BoundaryAnToreYaxe=SpinBoxToreYaxe->value();
+          _BoundaryAnToreZaxe=SpinBoxToreZaxe->value();
+        }
+        break;
+      }
+
+ }
 
   bool bOK = CreateOrUpdateBoundaryAn();
+
+  if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
+
   return bOK;
 
 }
@@ -250,30 +430,89 @@ bool MonCreateBoundaryAn:: CreateOrUpdateBoundaryAn()
 //----------------------------------------------------
 //  Creation de l'objet boundary
 {
-  if (_aBoundaryAnName != LEBoundaryName->text().trimmed())
+  _aName = LEName->text().trimmed();
+  switch (_Type)
   {
-    _aBoundaryAnName = LEBoundaryName->text().trimmed();
-    switch (_BoundaryType)
+    case 1 : // il s agit d un cylindre
     {
-      case 1 : // il s agit d un cylindre
+      try
       {
-        aBoundaryAn = _myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aBoundaryAnName.toStdString().c_str()), \
+        aBoundaryAn = myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_aName.toStdString().c_str()), \
         _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
-        break;
       }
-      case 2 : // il s agit d une sphere
+      catch( SALOME::SALOME_Exception& S_ex )
       {
-        aBoundaryAn = _myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aBoundaryAnName.toStdString().c_str()), \
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+    case 2 : // il s agit d une sphere
+    {
+      try
+      {
+        aBoundaryAn = myHomardGen->CreateBoundarySphere(CORBA::string_dup(_aName.toStdString().c_str()), \
         _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
-        break;
       }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+    case 3 : // il s agit d un cone defini par un axe et un angle
+    {
+      try
+      {
+        aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_aName.toStdString().c_str()), \
+        _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
+        _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+    case 4 : // il s agit d un cone defini par les 2 rayons
+    {
+      try
+      {
+        aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_aName.toStdString().c_str()), \
+        _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
+        _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+   case 5 : // il s agit d un tore
+    {
+      try
+      {
+        aBoundaryAn = myHomardGen->CreateBoundaryTorus(CORBA::string_dup(_aName.toStdString().c_str()), \
+        _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre, _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe, _BoundaryAnToreRRev, _BoundaryAnToreRPri );
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+     }
+      break;
     }
-    _parent->addBoundaryAn(_aBoundaryAnName);
   }
-// Mise en place des attributs
-  aBoundaryAn->SetLimit(_Xincr, _Yincr, _Zincr);
+  _parent->AddBoundaryAn(_aName);
 
-  HOMARD_UTILS::updateObjBrowser();
   return true;
 }
 // ------------------------------------------------------------------------
@@ -286,33 +525,33 @@ void MonCreateBoundaryAn::PushOnOK()
 void MonCreateBoundaryAn::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#un-cylindre") ) ;
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("un-cylindre"), QString(LanguageShort.c_str()));
 }
 
 // -----------------------------------
-void MonCreateBoundaryAn::SetNewBoundaryAnName()
+void MonCreateBoundaryAn::SetNewName()
 // -----------------------------------
 {
 // Recherche d'un nom par defaut qui n'existe pas encore
 
-  HOMARD::listeBoundarys_var  MyBoundaryAns = _myHomardGen->GetAllBoundarys();
-  int num = 0; QString aBoundaryAnName="";
-  while (aBoundaryAnName=="" )
+  HOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName();
+  int num = 0; QString aName="";
+  while (aName=="" )
   {
-    aBoundaryAnName.setNum(num+1) ;
-    aBoundaryAnName.insert(0, QString("Boun_")) ;
-    for ( int i=0; i<MyBoundaryAns->length(); i++)
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Boun_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
     {
-      if ( aBoundaryAnName ==  QString(MyBoundaryAns[i]))
+      if ( aName ==  QString(MyObjects[i]))
       {
-          num=num+1;
-          aBoundaryAnName="";
-          break;
+        num ++ ;
+        aName = "" ;
+        break ;
       }
    }
   }
-  LEBoundaryName->clear() ;
-  LEBoundaryName->insert(aBoundaryAnName);
+  LEName->setText(aName);
 }
 // ------------------------------------------------------------------------
 void MonCreateBoundaryAn::SetCylinder()
@@ -321,15 +560,12 @@ void MonCreateBoundaryAn::SetCylinder()
   MESSAGE("Debut de SetCylinder")
   gBCylindre->setVisible(1);
   gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+//
+  _Type=1;
+//
   adjustSize();
-  _BoundaryType=1;
-  SpinBox_Xcent->setValue(_Xcentre);
-  SpinBox_Xaxis->setValue(0.);
-  SpinBox_Ycent->setValue(_Ycentre);
-  SpinBox_Yaxis->setValue(0.);
-  SpinBox_Zcent->setValue(_Zcentre);
-  SpinBox_Zaxis->setValue(1.);
-  SpinBox_Radius->setValue(_Rayon);
 //   MESSAGE("Fin de SetCylinder")
 }
 // ------------------------------------------------------------------------
@@ -339,13 +575,249 @@ void MonCreateBoundaryAn::SetSphere()
   MESSAGE("Debut de SetSphere")
   gBCylindre->setVisible(0);
   gBSphere->setVisible(1);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+//
+  _Type=2;
+//
   adjustSize();
-  _BoundaryType=2;
-  SpinBox_Xcentre->setValue(_Xcentre);
-  SpinBox_Ycentre->setValue(_Ycentre);
-  SpinBox_Zcentre->setValue(_Zcentre);
-  SpinBox_Rayon->setValue(_Rayon);
 //   MESSAGE("Fin de SetSphere")
 }
+// ------------------------------------------------------------------------
+void MonCreateBoundaryAn::SetConeR()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConeR")
+//
+// Stockage et conversion des valeurs si elles ont change
+  if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value())  ||
+      (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value())  ||
+      (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value())  ||
+      (_BoundaryAnXorigCone != SpinBox_Cone_X2->value())  ||
+      (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value())  ||
+      (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value())  ||
+      (_BoundaryAngle       != SpinBox_Cone_V1->value()) )
+  {
+    MESSAGE("Stockage et conversion")
+    _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
+    _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
+    _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
+    _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
+    _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
+    _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
+    _BoundaryAngle       = SpinBox_Cone_V1->value() ;
+    convertRayonAngle(-1) ;
+  }
+//
+  _Type=4;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0));
+  SpinBox_Cone_V1->setSingleStep(_Rayon/10.);
+  SpinBox_Cone_V1->setMaximum(100000.*_DMax);
+  SpinBox_Cone_V1->setValue(_BoundaryAnRayon1);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
+//
+  TLCone_V2->setVisible(1);
+  SpinBox_Cone_V2->setVisible(1);
+  TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0));
+  SpinBox_Cone_V2->setValue(_BoundaryAnRayon2);
+//
+//   MESSAGE("Fin de SetConeR")
+}
+// ------------------------------------------------------------------------
+void MonCreateBoundaryAn::SetConeA()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConeA")
+// Stockage et conversion des valeurs si elles ont change
+  if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value())  ||
+      (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value())  ||
+      (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value())  ||
+      (_BoundaryAnRayon1 != SpinBox_Cone_V1->value())  ||
+      (_BoundaryAnXcone2 != SpinBox_Cone_X2->value())  ||
+      (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value())  ||
+      (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value())  ||
+      (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
+  {
+    MESSAGE("Stockage et conversion")
+    _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
+    _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
+    _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
+    _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
+    _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
+    _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
+    _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
+    _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
+    convertRayonAngle(1) ;
+  }
+//
+  _Type=3;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0));
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_V1->setSingleStep(1.);
+  SpinBox_Cone_V1->setMaximum(90.);
+//
+  TLCone_V2->setVisible(0);
+  SpinBox_Cone_V2->setVisible(0);
+//   MESSAGE("Fin de SetConeA")
+}
+
+
+// ------------------------------------------------------------------------
+void MonCreateBoundaryAn::SetCone()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetCone")
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  gBTore->setVisible(0);
+//
+  if ( RB_Def_radius->isChecked() )
+  {
+    SetConeR();
+  }
+  else
+  {
+    SetConeA();
+  }
+//
+  adjustSize();
+//   MESSAGE("Fin de SetCone")
+}
+// ------------------------------------------------------------------------
+void MonCreateBoundaryAn::SetTore()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetTore")
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(1);
+//
+  _Type=5;
+//
+  adjustSize();
+//   MESSAGE("Fin de SetTore")
+}
+// ------------------------------------------------------------------------
+void MonCreateBoundaryAn::convertRayonAngle(int option)
+// ------------------------------------------------------------------------
+// Conversion entre les deux formulations du cone :
+// par deux rayons ou avec un axe et un angle.
+// Voir sfcoi1 de HOMARD
+{
+  MESSAGE("Debut de convertRayonAngle, option = "<<option)
+//
+//         o
+//         !    .
+//         !        .
+//       RA!            .
+//         !                o
+//         !              RB!   .
+//         !                !       .
+//         A----------------B----------O
+//
+//   Thales : RA/RB = AO/BO  ==> BO = AB*RB/(RA-RB)
+//   Angle  : tg(alpha) = RA/AO
+//
+  double daux ;
+// De rayon vers angle :
+  if ( option == 1 )
+  {
+    double xa, ya, za, ra ;
+    double xb, yb, zb, rb ;
+// Positionnement de A vers B, avec RA>RB
+    if ( _BoundaryAnRayon1 > _BoundaryAnRayon2 )
+    {
+      xa = _BoundaryAnXcone1 ;
+      ya = _BoundaryAnYcone1 ;
+      za = _BoundaryAnZcone1 ;
+      ra = _BoundaryAnRayon1 ;
+      xb = _BoundaryAnXcone2 ;
+      yb = _BoundaryAnYcone2 ;
+      zb = _BoundaryAnZcone2 ;
+      rb = _BoundaryAnRayon2 ;
+    }
+    else
+    {
+      xa = _BoundaryAnXcone2 ;
+      ya = _BoundaryAnYcone2 ;
+      za = _BoundaryAnZcone2 ;
+      ra = _BoundaryAnRayon2 ;
+      xb = _BoundaryAnXcone1 ;
+      yb = _BoundaryAnYcone1 ;
+      zb = _BoundaryAnZcone1 ;
+      rb = _BoundaryAnRayon1 ;
+    }
+// Axe : relie les deux centres, de A vers B.  L'axe est normalise
+    _BoundaryAnXaxisCone = xb - xa ;
+    _BoundaryAnYaxisCone = yb - ya ;
+    _BoundaryAnZaxisCone = zb - za ;
+    daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
+    _BoundaryAnXaxisCone = _BoundaryAnXaxisCone/daux ;
+    _BoundaryAnYaxisCone = _BoundaryAnYaxisCone/daux ;
+    _BoundaryAnZaxisCone = _BoundaryAnZaxisCone/daux ;
+// Origine
+    daux = daux * rb / (ra-rb) ;
+    _BoundaryAnXorigCone = xb + daux*_BoundaryAnXaxisCone ;
+    _BoundaryAnYorigCone = yb + daux*_BoundaryAnYaxisCone ;
+    _BoundaryAnZorigCone = zb + daux*_BoundaryAnZaxisCone ;
+// Angle en degre
+    daux = ra / sqrt((_BoundaryAnXorigCone-xa)*(_BoundaryAnXorigCone-xa) + (_BoundaryAnYorigCone-ya)*(_BoundaryAnYorigCone-ya) + (_BoundaryAnZorigCone-za)*(_BoundaryAnZorigCone-za) ) ;
+    _BoundaryAngle = atan(daux)*180./PI ;
+  }
+// D'angle vers rayon :
+  else
+  {
+    double xax, yax, zax ;
+// L'axe est normalise
+    daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
+    xax = _BoundaryAnXaxisCone/daux ;
+    yax = _BoundaryAnYaxisCone/daux ;
+    zax = _BoundaryAnZaxisCone/daux ;
+// Centre 1 : l'origine
+    _BoundaryAnXcone1 = _BoundaryAnXorigCone ;
+    _BoundaryAnYcone1 = _BoundaryAnYorigCone ;
+    _BoundaryAnZcone1 = _BoundaryAnZorigCone ;
+// Rayon 1 : nul
+    _BoundaryAnRayon1 = 0. ;
+// Centre 2 : l'origine decalee d'une longueur arbitraire le long de l'axe
+    _BoundaryAnXcone2 = _BoundaryAnXorigCone + _DMax*xax ;
+    _BoundaryAnYcone2 = _BoundaryAnYorigCone + _DMax*yax ;
+    _BoundaryAnZcone2 = _BoundaryAnZorigCone + _DMax*zax ;
+// Rayon 2 : a calculer
+    _BoundaryAnRayon2 = _DMax*tan(_BoundaryAngle*PI/180.) ;
+  }
+//   MESSAGE("Fin de convertRayonAngle")
+}
 
 
index 7c0c22b851efe724aa42a10ad9de740e9e79a806..a3ce2139b77d3c23093b2dac5f812cd61ed5e8e2 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATEBOUNDARYAN_H
 #define MON_CREATEBOUNDARYAN_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Boundary)
 
-#include <CreateBoundaryAn.h>
+#include "ui_CreateBoundaryAn.h"
 #include <QDialog>
 
 class MonCreateCase;
-class MonCreateBoundaryAn : public QDialog, public Ui_CreateBoundaryAn
+class HOMARD_EXPORT MonCreateBoundaryAn : public QDialog, public Ui_CreateBoundaryAn
 {
     Q_OBJECT
 
@@ -49,30 +50,43 @@ protected :
 
     MonCreateCase * _parent;
 
-    QString _aBoundaryAnName;
+    QString _aName;
     QString _aCaseName;
 
-    int _BoundaryType;
+    double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ;
+    int _Type;
     double _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon;
     double _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis;
-    double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ;
     double _Xcentre, _Ycentre, _Zcentre, _Rayon ;
+    double _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1;
+    double _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2;
+    double _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone;
+    double _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnZorigCone;
+    double _BoundaryAngle;
+    double _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre;
+    double _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe;
+    double _BoundaryAnToreRRev, _BoundaryAnToreRPri;
 
 
     bool Chgt;
 
     HOMARD::HOMARD_Boundary_var aBoundaryAn ;
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     virtual void InitConnect();
     virtual void InitValBoundaryAn();
     virtual void InitMinMax();
-    virtual void SetNewBoundaryAnName();
+    virtual void SetNewName();
+    virtual void convertRayonAngle(int option);
     virtual bool CreateOrUpdateBoundaryAn();
 
 public slots:
     virtual void SetCylinder();
     virtual void SetSphere();
+    virtual void SetCone();
+    virtual void SetConeR();
+    virtual void SetConeA();
+    virtual void SetTore();
     virtual void PushOnOK();
     virtual bool PushOnApply();
     virtual void PushOnHelp();
index fde36eff27e66e3f61f38bf7227af409f36c30c3..c6ceaab1727a06fe346e55dcba520807b70750b1 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateBoundaryDi.h"
 #include "MonCreateListGroup.h"
 #include "MonCreateCase.h"
@@ -31,16 +29,18 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
+
 // -------------------------------------------------------------------------------
 MonCreateBoundaryDi::MonCreateBoundaryDi(MonCreateCase* parent, bool modal,
-                                         HOMARD::HOMARD_Gen_var myHomardGen,
-                                         QString caseName, QString aBoundaryName)
+                                         HOMARD::HOMARD_Gen_var myHomardGen0,
+                                         QString caseName, QString aName)
 // ---------------------------------------------------------------------------------
 /* Constructs a MonCreateBoundaryDi */
     :
     QDialog(0), Ui_CreateBoundaryDi(),
-    _parent(parent), _aBoundaryName(aBoundaryName),
-    _myHomardGen(HOMARD::HOMARD_Gen::_duplicate(myHomardGen)),
+    _parent(parent), _aName(aName),
+    myHomardGen(HOMARD::HOMARD_Gen::_duplicate(myHomardGen0)),
     _aCaseName(caseName)
     {
       MESSAGE("Constructeur") ;
@@ -48,7 +48,7 @@ MonCreateBoundaryDi::MonCreateBoundaryDi(MonCreateCase* parent, bool modal,
       setModal(modal);
       InitConnect();
 
-     if ( _aBoundaryName == QString("") ) {SetNewBoundaryName();};
+     if ( _aName == QString("") ) {SetNewName();};
     }
 
 // ------------------------------------------------------------------------
@@ -77,8 +77,8 @@ bool MonCreateBoundaryDi::PushOnApply()
 {
 // Verifications
 
-  QString aBoundaryName=LEBoundaryName->text().trimmed();
-  if (aBoundaryName=="") {
+  QString aName=LEName->text().trimmed();
+  if (aName=="") {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_BOUN_NAME") );
     return false;
@@ -103,19 +103,19 @@ bool MonCreateBoundaryDi::PushOnApply()
   }
 
 // Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom
-  if ( _aBoundaryName != aBoundaryName )
+  if ( _aName != aName )
   {
    try
    {
-     _aBoundaryName=aBoundaryName;
-     _aBoundary=_myHomardGen->CreateBoundaryDi(CORBA::string_dup(_aBoundaryName.toStdString().c_str()), aMeshName.toStdString().c_str(), aMeshFile.toStdString().c_str());
-     _parent->addBoundaryDi(_aBoundaryName);
-     _aBoundary->SetCaseCreation(_aCaseName.toStdString().c_str());
+     _aName=aName;
+     aBoundary=myHomardGen->CreateBoundaryDi(CORBA::string_dup(_aName.toStdString().c_str()), aMeshName.toStdString().c_str(), aMeshFile.toStdString().c_str());
+     _parent->AddBoundaryDi(_aName);
+     aBoundary->SetCaseCreation(_aCaseName.toStdString().c_str());
    }
    catch( SALOME::SALOME_Exception& S_ex )
    {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QString(CORBA::string_dup(S_ex.details.text)) );
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
       return false;
    }
   }
@@ -139,7 +139,8 @@ void MonCreateBoundaryDi::PushOnOK()
 void MonCreateBoundaryDi::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-discrete"));
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("frontiere-discrete"), QString(LanguageShort.c_str()));
 }
 // ------------------------------------------------------------------------
 void MonCreateBoundaryDi::AssocieLesGroupes()
@@ -151,38 +152,38 @@ void MonCreateBoundaryDi::AssocieLesGroupes()
   int i=0;
   for (it = _listeGroupesBoundary.constBegin(); it != _listeGroupesBoundary.constEnd(); it++)
      aSeqGroupe[i++]=(*it).toStdString().c_str();
-  _aBoundary->SetGroups(aSeqGroupe);
+  aBoundary->SetGroups(aSeqGroupe);
 
 }
 
 // -------------------------------------------------
-void MonCreateBoundaryDi::SetNewBoundaryName()
+void MonCreateBoundaryDi::SetNewName()
 // --------------------------------------------------
 {
 
-  HOMARD::listeBoundarys_var  MyBoundarys = _myHomardGen->GetAllBoundarys();
-  int num = 0; QString aBoundaryName="";
-  while (aBoundaryName == QString("") )
+  HOMARD::listeBoundarys_var  MyObjects = myHomardGen->GetAllBoundarysName();
+  int num = 0; QString aName="";
+  while (aName == QString("") )
   {
-    aBoundaryName.setNum(num+1) ;
-    aBoundaryName.insert(0, QString("Boun_")) ;
-    for ( int i=0; i<MyBoundarys->length(); i++)
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Boun_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
     {
-      if ( aBoundaryName ==  QString(MyBoundarys[i]))
+      if ( aName ==  QString(MyObjects[i]))
       {
-          num=num+1;
-          aBoundaryName="";
-          break;
+        num ++ ;
+        aName = "" ;
+        break ;
       }
    }
   }
-  LEBoundaryName->setText(aBoundaryName);
+  LEName->setText(aName);
 }
 // ------------------------------------------------------------------------
 void MonCreateBoundaryDi::SetMeshFile()
 // ------------------------------------------------------------------------
 {
-  QString aMeshFile = HOMARD_QT_COMMUN::PushNomFichier();
+  QString aMeshFile = HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") );
   if (!(aMeshFile.isEmpty())) LEFileName->setText(aMeshFile);
 }
 
@@ -203,7 +204,7 @@ void MonCreateBoundaryDi::SetFiltrage()
     return;
   }
 
-  MonCreateListGroup *aDlg = new MonCreateListGroup(NULL,this,  TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),
+  MonCreateListGroup *aDlg = new MonCreateListGroup(NULL, this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen),
                             _aCaseName, _listeGroupesBoundary) ;
   aDlg->show();
 }
index dc4b0b43ccbe506c0e173d5591899a249282903e..f99121926a30dc765d7a22ef5ea0810eaaeccc91 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATEBOUNDARYDI_H
 #define MON_CREATEBOUNDARYDI_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Boundary)
 
-#include <CreateBoundaryDi.h>
+#include "ui_CreateBoundaryDi.h"
 #include <QDialog>
 
 class MonCreateCase;
-class MonCreateBoundaryDi : public QDialog, public Ui_CreateBoundaryDi
+class HOMARD_EXPORT MonCreateBoundaryDi : public QDialog, public Ui_CreateBoundaryDi
 {
     Q_OBJECT
 
@@ -47,18 +48,18 @@ protected :
 
     MonCreateCase *_parent;
 
-    QString _aBoundaryName;
+    QString _aName;
     QString _aCaseName;
 
 
-    HOMARD::HOMARD_Boundary_var _aBoundary;
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Boundary_var aBoundary;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     QStringList  _listeGroupesBoundary;
 
     virtual void AssocieLesGroupes();
     virtual void InitConnect();
-    virtual void SetNewBoundaryName();
+    virtual void SetNewName();
 
 public slots:
 
index 2aaa85a1b473795ae7845737e8532387ad80281b..a912f79cfe30d62ff63f7407b6db8b142a279a71 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateCase.h"
 #include "MonCreateBoundaryAn.h"
 #include "MonEditBoundaryAn.h"
 #include "MonCreateBoundaryDi.h"
 #include "MonEditBoundaryDi.h"
+#include "HOMARD.hxx"
 
 #include <QFileDialog>
 #include <QMessageBox>
@@ -33,34 +32,43 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+#ifdef WIN32
+#include <direct.h>
+#endif
+
+using namespace std;
 
-// -----------------------------------------------------------------------------------------
-MonCreateCase::MonCreateCase(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen)
 // -----------------------------------------------------------------------------------------
 /* Constructs a MonCreateCase
  * Inherits from CasHomard
  * Sets attributes to default values
  */
+// -----------------------------------------------------------------------------------------
+MonCreateCase::MonCreateCase( bool modal, HOMARD::HOMARD_Gen_var myHomardGen0 )
     :
     Ui_CreateCase(),
     _aCaseName(""),_aDirName(""),
-    _ConfType(1),
+    _ConfType(0),
+    _ExtType(0),
     _Pyram(0)
 {
-      _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
-      setupUi(this);
-      setModal(modal);
-      InitConnect();
+  MESSAGE("Debut du constructeur de MonCreateCase");
+  myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  setupUi(this);
+  setModal(modal);
+  InitConnect();
 
-      SetNewCaseName() ;
-      GBBoundaryA->setVisible(0);
-      GBBoundaryD->setVisible(0);
-      GBTypeNoConf->setVisible(0);
-      adjustSize();
-      GBAdvancedOptions->setVisible(0);
-      CBPyramid->setChecked(false);
-}
+  SetNewName() ;
+  GBBoundaryA->setVisible(0);
+  GBBoundaryD->setVisible(0);
+  GBAdvancedOptions->setVisible(0);
+  Comment->setVisible(0);
+  CBPyramid->setChecked(false);
+//
+  adjustSize();
 
+//   MESSAGE("Fin du constructeur de MonCreateCase");
+}
 // ------------------------------------------------------------------------
 MonCreateCase::~MonCreateCase()
 // ------------------------------------------------------------------------
@@ -71,14 +79,12 @@ MonCreateCase::~MonCreateCase()
 void MonCreateCase::InitConnect()
 // ------------------------------------------------------------------------
 {
+    connect( LEName,     SIGNAL(textChanged(QString)), this, SLOT(CaseNameChanged()));
     connect( PushDir,        SIGNAL(pressed()), this, SLOT(SetDirName()));
     connect( PushFichier,    SIGNAL(pressed()), this, SLOT(SetFileName()));
 
     connect( RBConforme,     SIGNAL(clicked()), this, SLOT(SetConforme()));
     connect( RBNonConforme,  SIGNAL(clicked()), this, SLOT(SetNonConforme()));
-    connect( RB1NpM,         SIGNAL(clicked()), this, SLOT(Set1NpM()));
-    connect( RB1NpA,         SIGNAL(clicked()), this, SLOT(Set1NpA()));
-    connect( RBQuelconque,   SIGNAL(clicked()), this, SLOT(SetQuelconque()));
 
     connect( CBBoundaryD,      SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryD()));
     connect( PBBoundaryDiNew,  SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew()));
@@ -90,12 +96,19 @@ void MonCreateCase::InitConnect()
     connect( PBBoundaryAnHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) );
 
     connect( CBAdvanced,     SIGNAL(stateChanged(int)), this, SLOT(SetAdvanced()));
+    connect( RBStandard,     SIGNAL(clicked()), this, SLOT(SetStandard()));
+    connect( RBBox,          SIGNAL(clicked()), this, SLOT(SetBox()));
+    connect( RBNC1NpA,       SIGNAL(clicked()), this, SLOT(SetNC1NpA()));
+    connect( RBNCQuelconque, SIGNAL(clicked()), this, SLOT(SetNCQuelconque()));
+
+    connect( RBMED,          SIGNAL(clicked()), this, SLOT(SetMED()));
+    connect( RBSaturne,      SIGNAL(clicked()), this, SLOT(SetSaturne()));
+    connect( RBSaturne2D,    SIGNAL(clicked()), this, SLOT(SetSaturne2D()));
 
     connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
-    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply(0)));
     connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
     connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
-    connect( LECaseName,     SIGNAL(textChanged(QString)), this, SLOT(CaseNameChanged()));
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::InitBoundarys()
@@ -106,7 +119,7 @@ void MonCreateCase::InitBoundarys()
 // Pour les frontieres analytiques : la colonne des groupes
   HOMARD::ListGroupType_var _listeGroupesCas = aCase->GetGroups();
   QTableWidgetItem *__colItem = new QTableWidgetItem();
-  __colItem->setText(QApplication::translate("CreateCase", "", 0, QApplication::UnicodeUTF8));
+  __colItem->setText(QApplication::translate("CreateCase", "", 0));
   TWBoundary->setHorizontalHeaderItem(0, __colItem);
   for ( int i = 0; i < _listeGroupesCas->length(); i++ )
   {
@@ -117,14 +130,14 @@ void MonCreateCase::InitBoundarys()
 // Pour les frontieres discretes : la liste a saisir
 // Pour les frontieres analytiques : les colonnes de chaque frontiere
   HOMARD::HOMARD_Boundary_var myBoundary ;
-  HOMARD::listeBoundarys_var  mesBoundarys = _myHomardGen->GetAllBoundarys();
+  HOMARD::listeBoundarys_var  mesBoundarys = myHomardGen->GetAllBoundarysName();
 //   MESSAGE("Nombre de frontieres enregistrees : "<<mesBoundarys->length());
   for (int i=0; i<mesBoundarys->length(); i++)
   {
-    myBoundary = _myHomardGen->GetBoundary(mesBoundarys[i]);
-    int type_obj = myBoundary->GetBoundaryType() ;
+    myBoundary = myHomardGen->GetBoundary(mesBoundarys[i]);
+    int type_obj = myBoundary->GetType() ;
     if ( type_obj==0 ) { CBBoundaryDi->addItem(QString(mesBoundarys[i])); }
-    else               { addBoundaryAn(QString(mesBoundarys[i])); }
+    else               { AddBoundaryAn(QString(mesBoundarys[i])); }
   }
 // Ajustement
   TWBoundary->resizeColumnsToContents();
@@ -132,11 +145,11 @@ void MonCreateCase::InitBoundarys()
   TWBoundary->clearSelection();
 }
 // -------------------------------
-bool MonCreateCase::PushOnApply()
+bool MonCreateCase::PushOnApply(int option)
 // --------------------------------
 {
   MESSAGE("PushOnApply");
-  QString aCaseName=LECaseName->text().trimmed();
+  QString aCaseName=LEName->text().trimmed();
   if ( aCaseName == "" )
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
@@ -151,13 +164,19 @@ bool MonCreateCase::PushOnApply()
                               QObject::tr("HOM_CASE_DIRECTORY_1") );
     return false;
   }
-  if ((aDirName != _aDirName) and (_myHomardGen->VerifieDir( aDirName.toStdString().c_str()) == false))
-  {
-    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                              QObject::tr("HOM_CASE_DIRECTORY_2") );
-    return false;
+
+  if ( aDirName != _aDirName)
+  { QString CaseNameDir = myHomardGen->VerifieDir( aDirName.toStdString().c_str()) ;
+    if ( ( CaseNameDir != "" ) & ( CaseNameDir != aCaseName ) )
+    {
+      QString texte ;
+      texte = QObject::tr("HOM_CASE_DIRECTORY_2") + CaseNameDir ;
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                texte );
+      return false;
+    }
   }
-  if (chdir(aDirName.toStdString().c_str()) != 0)
+  if (CHDIR(aDirName.toStdString().c_str()) != 0)
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_CASE_DIRECTORY_3") );
@@ -180,6 +199,7 @@ bool MonCreateCase::PushOnApply()
     return false;
   }
 
+// On verifie qu'un groupe n'est pas associe a deux frontieres differentes
   if (CBBoundaryA->isChecked())
   {
     QStringList ListeGroup ;
@@ -211,12 +231,13 @@ bool MonCreateCase::PushOnApply()
     }
   }
 
+// Creation du cas
   if (aCaseName != _aCaseName )
   {
     _aCaseName = aCaseName;
     try
     {
-    aCase = _myHomardGen->CreateCase( \
+    aCase = myHomardGen->CreateCase( \
             CORBA::string_dup(_aCaseName.toStdString().c_str()),  \
             CORBA::string_dup(aMeshName.toStdString().c_str()),  \
             CORBA::string_dup(aFileName.toStdString().c_str()) );
@@ -224,18 +245,7 @@ bool MonCreateCase::PushOnApply()
     catch( SALOME::SALOME_Exception& S_ex )
     {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QString(CORBA::string_dup(S_ex.details.text)) );
-      try
-      {
-          aCase = _myHomardGen->GetCas(_aCaseName.toStdString().c_str());
-          string iter0 = aCase->GetIter0Name();
-          HOMARD::HOMARD_Iteration_var aIter =  _myHomardGen->GetIteration(iter0.c_str());
-          QString aFileName = aIter->GetMeshFile();
-          LEFileName->setText(aFileName);
-          LEFileName->setReadOnly(true);
-          PushFichier->hide();
-      }
-      catch( SALOME::SALOME_Exception& S_ex )  {};
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
       return false;
     }
     LEFileName->setReadOnly(true);
@@ -243,71 +253,81 @@ bool MonCreateCase::PushOnApply()
     InitBoundarys();
   }
 
+// Repertoire et type
   aCase->SetDirName(aDirName.toStdString().c_str());
   _aDirName=aDirName;
   aCase->SetConfType(_ConfType);
+  aCase->SetExtType(_ExtType);
 
-// Enregistrement de la frontiere discrete
-  if (CBBoundaryD->isChecked())
+//   Menage des eventuelles frontieres deja enregistrees
+  aCase->SupprBoundaryGroup() ;
+
+  // Enregistrement et publication dans l'arbre d'etudes a la sortie definitive
+  if ( option > 0 )
   {
-    QString monBoundaryDiName=CBBoundaryDi->currentText();
-    if (monBoundaryDiName != "" )
+    if (CBBoundaryD->isChecked())
     {
-      aCase->AddBoundaryGroup(monBoundaryDiName.toStdString().c_str(), "");
+      QString monBoundaryDiName=CBBoundaryDi->currentText();
+      if (monBoundaryDiName != "" )
+      {
+        aCase->AddBoundaryGroup(monBoundaryDiName.toStdString().c_str(), "");
+      }
     }
-  }
-
-// Enregistrement des liens (groupe,frontiere analytique)
-  if (CBBoundaryA->isChecked())
-  {
-    QString NomGroup ;
-    int nbcol = TWBoundary->columnCount();
-    int nbrow = TWBoundary->rowCount();
-    for ( int col=1; col< nbcol; col++)
+    if (CBBoundaryA->isChecked())
     {
-      for ( int row=0; row< nbrow; row++)
+      QString NomGroup ;
+      int nbcol = TWBoundary->columnCount();
+      int nbrow = TWBoundary->rowCount();
+      for ( int col=1; col< nbcol; col++)
       {
-        if ( TWBoundary->item( row, col )->checkState() ==  Qt::Checked )
+        for ( int row=0; row< nbrow; row++)
         {
-//        Nom du groupe
-          NomGroup = QString(TWBoundary->item(row, 0)->text()) ;
-//        Nom de la frontiere
-          QTableWidgetItem *__colItem = new QTableWidgetItem();
-          __colItem = TWBoundary->horizontalHeaderItem(col);
-          aCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(), NomGroup.toStdString().c_str());
+          if ( TWBoundary->item( row, col )->checkState() ==  Qt::Checked )
+          {
+  //        Nom du groupe
+            NomGroup = QString(TWBoundary->item(row, 0)->text()) ;
+  //        Nom de la frontiere
+            QTableWidgetItem *__colItem = new QTableWidgetItem();
+            __colItem = TWBoundary->horizontalHeaderItem(col);
+            aCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(), NomGroup.toStdString().c_str());
+          }
         }
       }
     }
   }
 
+
 // Options avancees
   if (CBAdvanced->isChecked())
   {
 // Autorisation des pyramides
     if (CBPyramid->isChecked()) { _Pyram = 1 ; }
   }
+  aCase->SetPyram(_Pyram);
 
   HOMARD_UTILS::updateObjBrowser();
+
   return true;
 }
 // ---------------------------
 void MonCreateCase::PushOnOK()
 // ---------------------------
 {
-     bool bOK = PushOnApply();
-     if ( bOK )  this->close();
+  bool bOK = PushOnApply(1);
+  if ( bOK ) this->close();
 }
 //------------------------------
 void MonCreateCase::PushOnHelp()
 //-------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_case.html"));
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_case.html"), QString(""), QString(LanguageShort.c_str()));
 }
 // ---------------------------------
-void MonCreateCase::SetNewCaseName()
+void MonCreateCase::SetNewName()
 // ------------------------------
 {
-  HOMARD::listeCases_var  MyCases = _myHomardGen->GetAllCases();
+  HOMARD::listeCases_var  MyCases = myHomardGen->GetAllCasesName();
   int num = 0; QString aCaseName="";
   while (aCaseName=="" )
   {
@@ -317,14 +337,14 @@ void MonCreateCase::SetNewCaseName()
     {
       if ( aCaseName ==  QString((MyCases)[i]))
       {
-          num=num+1;
-          aCaseName="";
-          break;
+        num ++ ;
+        aCaseName = "" ;
+        break ;
       }
    }
   }
-  LECaseName->clear() ;
-  LECaseName->insert(aCaseName);
+  LEName->clear() ;
+  LEName->insert(aCaseName);
 }
 
 // ------------------------------------------------------------------------
@@ -339,7 +359,7 @@ void MonCreateCase::SetFileName()
 // ------------------------------------------------------------------------
 {
   QString fileName0 = LEFileName->text().trimmed();
-  QString fileName = HOMARD_QT_COMMUN::PushNomFichier();
+  QString fileName = HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") ) ;
   if (fileName.isEmpty()) fileName = fileName0 ;
   LEFileName->setText(fileName);
 }
@@ -347,36 +367,71 @@ void MonCreateCase::SetFileName()
 void MonCreateCase::SetConforme()
 // ------------------------------------------------------------------------
 {
-  GBTypeNoConf->setVisible(0);
+//
+  _ConfType=0;
+  RBNC1NpA->setVisible(0);
+  RBNCQuelconque->setVisible(0);
+//
   adjustSize();
-  _ConfType=1;
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::SetNonConforme()
 // ------------------------------------------------------------------------
 {
-  GBTypeNoConf->setVisible(1);
-  RB1NpM->setChecked(true);
+//
+  _ConfType=1;
+  RBNC1NpA->setVisible(1);
+  RBNCQuelconque->setVisible(1);
+//
   adjustSize();
-  _ConfType=2;
 }
 // ------------------------------------------------------------------------
-void MonCreateCase::Set1NpM()
+void MonCreateCase::SetStandard()
+// ------------------------------------------------------------------------
+{
+  if ( ( _ConfType == 0 ) || ( _ConfType == -1 ) ) { _ConfType = 0 ; }
+  else { _ConfType = 1 ; }
+  RBStandard->setChecked(true);
+}
+// ------------------------------------------------------------------------
+void MonCreateCase::SetBox()
 // ------------------------------------------------------------------------
 {
-  _ConfType=2;
+  if ( ( _ConfType == 0 ) || ( _ConfType == -1 ) ) { _ConfType = -1 ; }
+  else { _ConfType = -2 ; }
 }
 // ------------------------------------------------------------------------
-void MonCreateCase::Set1NpA()
+void MonCreateCase::SetNC1NpA()
 // ------------------------------------------------------------------------
 {
-  _ConfType=3;
+  _ConfType = 2;
 }
 // ------------------------------------------------------------------------
-void MonCreateCase::SetQuelconque()
+void MonCreateCase::SetNCQuelconque()
 // ------------------------------------------------------------------------
 {
-  _ConfType=4;
+  _ConfType = 3;
+}
+// ------------------------------------------------------------------------
+void MonCreateCase::SetMED()
+// ------------------------------------------------------------------------
+{
+  _ExtType = 0 ;
+  RBMED->setChecked(true);
+}
+// ------------------------------------------------------------------------
+void MonCreateCase::SetSaturne()
+// ------------------------------------------------------------------------
+{
+  _ExtType = 1 ;
+  RBSaturne->setChecked(true);
+}
+// ------------------------------------------------------------------------
+void MonCreateCase::SetSaturne2D()
+// ------------------------------------------------------------------------
+{
+  _ExtType = 2 ;
+  RBSaturne2D->setChecked(true);
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::SetBoundaryD()
@@ -385,17 +440,18 @@ void MonCreateCase::SetBoundaryD()
   MESSAGE("Debut de SetBoundaryD ");
   if (CBBoundaryD->isChecked())
   {
-    bool bOK = PushOnApply();
+    bool bOK = PushOnApply(0);
     if (bOK) { GBBoundaryD->setVisible(1); }
     else     { GBBoundaryD->setVisible(0);
                CBBoundaryD->setChecked(0);
                CBBoundaryD->setCheckState(Qt::Unchecked); }
   }
   else { GBBoundaryD->setVisible(0); }
+//
   adjustSize();
 }
 // ------------------------------------------------------------------------
-void MonCreateCase::addBoundaryDi(QString newBoundary)
+void MonCreateCase::AddBoundaryDi(QString newBoundary)
 // ------------------------------------------------------------------------
 {
   CBBoundaryDi->insertItem(0,newBoundary);
@@ -406,7 +462,7 @@ void MonCreateCase::PushBoundaryDiNew()
 // ------------------------------------------------------------------------
 {
    MonCreateBoundaryDi *BoundaryDlg = new MonCreateBoundaryDi(this, true,
-                HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, "") ;
+                HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName, "") ;
    BoundaryDlg->show();
 }
 // ------------------------------------------------------------------------
@@ -415,14 +471,15 @@ void MonCreateCase::PushBoundaryDiEdit()
 {
   if (CBBoundaryDi->currentText() == QString(""))  return;
   MonEditBoundaryDi *BoundaryDlg = new MonEditBoundaryDi(this, true,
-       HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, CBBoundaryDi->currentText() ) ;
+       HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName, CBBoundaryDi->currentText() ) ;
   BoundaryDlg->show();
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::PushBoundaryDiHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-discrete") ) ;
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("frontiere-discrete"), QString(LanguageShort.c_str()));
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::SetBoundaryA()
@@ -431,29 +488,30 @@ void MonCreateCase::SetBoundaryA()
   MESSAGE("Debut de SetBoundaryA ");
   if (CBBoundaryA->isChecked())
   {
-    bool bOK = PushOnApply();
+    bool bOK = PushOnApply(0);
     if (bOK) { GBBoundaryA->setVisible(1); }
     else     { GBBoundaryA->setVisible(0);
                CBBoundaryA->setChecked(0);
                CBBoundaryA->setCheckState(Qt::Unchecked); }
   }
   else { GBBoundaryA->setVisible(0); }
+//
   adjustSize();
 //
 //   MESSAGE("Fin de SetBoundaryA ");
 }
 // ------------------------------------------------------------------------
-void MonCreateCase::addBoundaryAn(QString newBoundary)
+void MonCreateCase::AddBoundaryAn(QString newBoundary)
 // ------------------------------------------------------------------------
 {
-  MESSAGE("Debut de addBoundaryAn ");
+  MESSAGE("Debut de AddBoundaryAn ");
 // Ajout d'une nouvelle colonne
   int nbcol = TWBoundary->columnCount();
 //   MESSAGE("nbcol " <<  nbcol);
   nbcol += 1 ;
   TWBoundary->setColumnCount ( nbcol ) ;
   QTableWidgetItem *__colItem = new QTableWidgetItem();
-  __colItem->setText(QApplication::translate("CreateCase", newBoundary.toStdString().c_str(), 0, QApplication::UnicodeUTF8));
+  __colItem->setText(QApplication::translate("CreateCase", newBoundary.toStdString().c_str(), 0));
   TWBoundary->setHorizontalHeaderItem(nbcol-1, __colItem);
 /*  TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/
 // Chaque case est a cocher
@@ -468,14 +526,14 @@ void MonCreateCase::addBoundaryAn(QString newBoundary)
   }
   TWBoundary->resizeColumnToContents(nbcol-1);
 //   TWBoundary->resizeRowsToContents();
-//   MESSAGE("Fin de addBoundaryAn ");
+//   MESSAGE("Fin de AddBoundaryAn ");
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::PushBoundaryAnNew()
 // ------------------------------------------------------------------------
 {
    MonCreateBoundaryAn *BoundaryDlg = new MonCreateBoundaryAn(this, true,
-                HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName) ;
+                HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName) ;
    BoundaryDlg->show();
 }
 // ------------------------------------------------------------------------
@@ -492,7 +550,7 @@ void MonCreateCase::PushBoundaryAnEdit()
     MESSAGE("nom "<<nom.toStdString().c_str());
     if (nom != QString(""))
     { MonEditBoundaryAn *BoundaryDlg = new MonEditBoundaryAn(this, true,
-        HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, nom ) ;
+        HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName, nom ) ;
       BoundaryDlg->show(); }
   }
 }
@@ -500,13 +558,14 @@ void MonCreateCase::PushBoundaryAnEdit()
 void MonCreateCase::PushBoundaryAnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html#frontiere-analytique") ) ;
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("frontiere-analytique"), QString(LanguageShort.c_str()));
 }
 // ------------------------------------------------------------------------
 void MonCreateCase::CaseNameChanged()
 // ------------------------------------------------------------------------
 {
-    if (_aCaseName != LECaseName->text().trimmed())
+    if (_aCaseName != LEName->text().trimmed())
     {
        LEFileName->setReadOnly(false);
        PushFichier->show();
@@ -517,11 +576,28 @@ void MonCreateCase::SetAdvanced()
 // ------------------------------------------------------------------------
 {
   MESSAGE("Debut de SetAdvanced ");
-  if (CBAdvanced->isChecked()) { GBAdvancedOptions->setVisible(1); }
+  if (CBAdvanced->isChecked())
+  { GBAdvancedOptions->setVisible(1);
+    GBConforme->setVisible(1);
+    RBStandard->setVisible(1);
+    RBBox->setVisible(1);
+    if ( ( _ConfType == 0 ) || ( _ConfType == -1 ) )
+    { RBNC1NpA->setVisible(0);
+      RBNCQuelconque->setVisible(0);}
+    else
+    { RBNC1NpA->setVisible(1);
+      RBNCQuelconque->setVisible(1);}
+    GBFormat->setVisible(1);
+    RBMED->setVisible(1);
+    RBSaturne2D->setVisible(1);
+  }
   else
   { GBAdvancedOptions->setVisible(0);
     CBPyramid->setChecked(false);
     _Pyram = 0 ;
+    SetStandard() ;
+    SetMED() ;
  }
+//
   adjustSize();
 }
index 34c66065e759c20c0e05aa14a12dad04dc6e142e..7b3815992c5e8da6e13bfe8eaf1e656786acd8b3 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_CREATECASE_H
 #define MON_CREATECASE_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Cas)
 
-#include <CreateCase.h>
+#include "ui_CreateCase.h"
 #include <QWidget>
 
-class MonCreateCase : public QDialog, public Ui_CreateCase
+class HOMARD_EXPORT MonCreateCase : public QDialog, public Ui_CreateCase
 {
     Q_OBJECT
 
 public:
-    MonCreateCase( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen);
+    MonCreateCase( bool modal, HOMARD::HOMARD_Gen_var myHomardGen );
     ~MonCreateCase();
 
-    void addBoundaryAn(QString newBoundary);
-    void addBoundaryDi(QString newBoundary);
+    void AddBoundaryAn(QString newBoundary);
+    void AddBoundaryDi(QString newBoundary);
 
 protected :
     QString _aCaseName;
     QString _aDirName;
 
     int _ConfType;
+    int _ExtType;
 
     int _Pyram;
 
     HOMARD::HOMARD_Cas_var aCase ;
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     virtual void InitConnect();
     virtual void InitBoundarys();
-    virtual void SetNewCaseName();
+    virtual void SetNewName();
 
 public slots:
     virtual void SetDirName();
@@ -62,9 +65,14 @@ public slots:
 
     virtual void SetConforme();
     virtual void SetNonConforme();
-    virtual void Set1NpM();
-    virtual void Set1NpA();
-    virtual void SetQuelconque();
+    virtual void SetStandard();
+    virtual void SetBox();
+    virtual void SetNC1NpA();
+    virtual void SetNCQuelconque();
+
+    virtual void SetMED();
+    virtual void SetSaturne();
+    virtual void SetSaturne2D();
 
     virtual void SetBoundaryD();
     virtual void PushBoundaryDiNew();
@@ -78,7 +86,7 @@ public slots:
     virtual void SetAdvanced();
 
     virtual void PushOnOK();
-    virtual bool PushOnApply();
+    virtual bool PushOnApply(int option);
     virtual void PushOnHelp();
 
     virtual void CaseNameChanged();
index bffc7df57f0ef14e48c2870c816b83f9e04295cc..c73c86f100b964331bacc548aaeb2a3562e6d822 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateHypothesis.h"
 #include "MonCreateListGroup.h"
 #include "MonCreateIteration.h"
@@ -33,16 +31,18 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
+
 // -------------------------------------------------------------------------------
 MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal,
-                                         HOMARD::HOMARD_Gen_var myHomardGen,
-                                         QString aHypothesisName,
+                                         HOMARD::HOMARD_Gen_var myHomardGen0,
+                                         QString Name,
                                          QString caseName, QString aFieldFile)
 // ---------------------------------------------------------------------------------
 /* Constructs a MonCreateHypothesis */
     :
-    QDialog(0), Ui_CreateHypothesis(),
-    _parent(parent), _aHypothesisName(aHypothesisName),
+    QScrollArea(0), Ui_CreateHypothesis(),
+    _parent(parent), _Name(Name),
     _aCaseName(caseName), _aFieldFile(aFieldFile),
     _aFieldName(""),
     _aTypeAdap(-2), _aTypeRaff(1), _aTypeDera(0),
@@ -51,15 +51,19 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal,
     _UsField(0), _UsCmpI(0), _TypeFieldInterp(0),
     _NivMax(-1),
     _DiamMin(-1.),
-    _AdapInit(0)
+    _AdapInit(0),
+    _ExtraOutput(1)
+
 {
       MESSAGE("Constructeur") ;
-      _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
       setupUi(this);
-      setModal(modal);
+      if ( modal ) { setWindowModality(Qt::WindowModal); }
+      else         { setWindowModality(Qt::NonModal); }
+      setWindowFlags( Qt::WindowStaysOnTopHint ) ;
       InitConnect();
 
-      SetNewHypothesisName();
+      SetNewName();
       if (_aFieldFile != QString(""))
       { RBChamp->setChecked(1);
         SetChamp();
@@ -70,6 +74,14 @@ MonCreateHypothesis::MonCreateHypothesis(MonCreateIteration* parent, bool modal,
       }
       SetFieldNo();
       GBAdvancedOptions->setVisible(0);
+      CBOutputLevel->setChecked(false);
+      CBOutputQuality->setChecked(false);
+      CBOutputDiameter->setChecked(false);
+      CBOutputParent->setChecked(false);
+      CBOutputVoisins->setChecked(false);
+      _ExtraOutput = 1 ;
+//
+      adjustSize();
 }
 
 // ------------------------------------------------------------------------
@@ -91,10 +103,12 @@ void MonCreateHypothesis::InitConnect()
     connect( CBFieldName,  SIGNAL(activated(int)), this, SLOT( SetFieldName()));
     connect( RBRPE,        SIGNAL(clicked()), this, SLOT(SetRPE()));
     connect( RBRRel,       SIGNAL(clicked()), this, SLOT(SetRRel()));
+    connect( RBRMuSigma,   SIGNAL(clicked()), this, SLOT(SetRMS()));
     connect( RBRAbs,       SIGNAL(clicked()), this, SLOT(SetRAbs()));
     connect( RBRNo,        SIGNAL(clicked()), this, SLOT(SetRNo()));
     connect( RBCPE,        SIGNAL(clicked()), this, SLOT(SetCPE()));
     connect( RBCRel,       SIGNAL(clicked()), this, SLOT(SetCRel()));
+    connect( RBCMuSigma,   SIGNAL(clicked()), this, SLOT(SetCMS()));
     connect( RBCAbs,       SIGNAL(clicked()), this, SLOT(SetCAbs()));
     connect( RBCNo,        SIGNAL(clicked()), this, SLOT(SetCNo()));
     connect( RBL2,         SIGNAL(clicked()), this, SLOT(SetUCL2()));
@@ -129,7 +143,7 @@ bool MonCreateHypothesis::PushOnApply()
 // Verifications
 
 
-  if (LEHypothesisName->text().trimmed()=="") {
+  if (LEName->text().trimmed()=="") {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_HYPO_NAME") );
     return false;
@@ -139,13 +153,13 @@ bool MonCreateHypothesis::PushOnApply()
   if (VerifieComposant() == false)  return false;
 
 // Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom
-  if (LEHypothesisName->text().trimmed() != _aHypothesisName)
+  if (LEName->text().trimmed() != _Name)
   {
-    _aHypothesisName=LEHypothesisName->text().trimmed();
+    _Name=LEName->text().trimmed();
     try
     {
-     _aHypothesis=_myHomardGen->CreateHypothesis(CORBA::string_dup(_aHypothesisName.toStdString().c_str()) );
-     _parent->addHypothese(_aHypothesisName);
+     aHypothesis=myHomardGen->CreateHypothesis(CORBA::string_dup(_Name.toStdString().c_str()) );
+     _parent->addHypothese(_Name);
     }
     catch( SALOME::SALOME_Exception& S_ex )
     {
@@ -156,9 +170,15 @@ bool MonCreateHypothesis::PushOnApply()
   }
 
 // Mise en place des attributs
-  _aHypothesis->SetAdapRefinUnRef(_aTypeAdap,_aTypeRaff,_aTypeDera);
-  _aHypothesis->SetTypeFieldInterp(_TypeFieldInterp);
-  _aHypothesis->SetCaseCreation(_aCaseName.toStdString().c_str());
+  if ( _aTypeAdap == -1 )
+  {
+    int TypeRaffDera ;
+    if ( _aTypeRaff == 1 ) { TypeRaffDera = 1 ; }
+    else                   { TypeRaffDera = -1 ; }
+    aHypothesis->SetUnifRefinUnRef(TypeRaffDera);
+  }
+  aHypothesis->SetTypeFieldInterp(_TypeFieldInterp);
+  aHypothesis->SetCaseCreation(_aCaseName.toStdString().c_str());
 
   AssocieLesZones();
   AssocieComposants();
@@ -169,16 +189,25 @@ bool MonCreateHypothesis::PushOnApply()
   if (CBAdvanced->isChecked())
   {
 // Enregistrement du niveau maximal
-    _NivMax = spinBoxNivMax->value() ;
-    _aHypothesis->SetNivMax(_NivMax);
+    _NivMax = SpinBoxNivMax->value() ;
+    aHypothesis->SetNivMax(_NivMax);
 // Enregistrement du diametre minimal
     _DiamMin = doubleSpinBoxDiamMin->value() ;
-    _aHypothesis->SetDiamMin(_DiamMin);
+    aHypothesis->SetDiamMin(_DiamMin);
 // Enregistrement de l'intialisation de l'adaptation
-    _aHypothesis->SetAdapInit(_AdapInit);
+    aHypothesis->SetAdapInit(_AdapInit);
+// Sortie optionnelle des niveaux de raffinement, des diametres, des qualites
+    _ExtraOutput = 1 ;
+    if (CBOutputLevel->isChecked())    { _ExtraOutput =  2 ; }
+    if (CBOutputQuality->isChecked())  { _ExtraOutput =  3*_ExtraOutput ; }
+    if (CBOutputDiameter->isChecked()) { _ExtraOutput =  5*_ExtraOutput ; }
+    if (CBOutputParent->isChecked())   { _ExtraOutput =  7*_ExtraOutput ; }
+    if (CBOutputVoisins->isChecked())  { _ExtraOutput = 11*_ExtraOutput ; }
+    aHypothesis->SetExtraOutput(_ExtraOutput);
   }
 
-  HOMARD_UTILS::updateObjBrowser();
+  HOMARD_UTILS::updateObjBrowser() ;
+
   return true;
 }
 
@@ -194,31 +223,32 @@ void MonCreateHypothesis::PushOnOK()
 void MonCreateHypothesis::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_hypothese.html"));
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_hypothese.html"), QString(""), QString(LanguageShort.c_str()));
 }
 // -------------------------------------------------
-void MonCreateHypothesis::SetNewHypothesisName()
+void MonCreateHypothesis::SetNewName()
 // --------------------------------------------------
 {
 
-  HOMARD::listeHypotheses_var  MyHypos = _myHomardGen->GetAllHypotheses();
+  HOMARD::listeHypotheses_var  MyObjects = myHomardGen->GetAllHypothesesName();
   int num = 0;//
-  QString aHypothesisName="";
-  while (aHypothesisName=="" )
+  QString aName="";
+  while (aName=="" )
   {
-    aHypothesisName.setNum(num+1) ;
-    aHypothesisName.insert(0, QString("Hypo_")) ;
-    for ( int i=0; i<MyHypos->length(); i++)
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Hypo_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
     {
-      if ( aHypothesisName ==  QString(MyHypos[i]))
+      if ( aName ==  QString(MyObjects[i]))
       {
-          num=num+1;
-          aHypothesisName="";
-          break;
+        num ++ ;
+        aName = "" ;
+        break ;
       }
     }
   }
-  LEHypothesisName->setText(aHypothesisName);
+  LEName->setText(aName);
 }
 
 //
@@ -231,8 +261,10 @@ void MonCreateHypothesis::SetUniforme()
   else                         { GBFieldFile->setVisible(1); }
   GBAreaManagement->setVisible(0);
   GBUniform->setVisible(1);
-  adjustSize();
+
   _aTypeAdap = -1 ;
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetChamp()
@@ -258,9 +290,10 @@ void MonCreateHypothesis::SetChamp()
   GBAreaManagement->adjustSize();
   GBFieldManagement->adjustSize();
   GBFieldFile->adjustSize();
-  adjustSize();
 
   _aTypeAdap = 1 ;
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetZone()
@@ -272,10 +305,12 @@ void MonCreateHypothesis::SetZone()
   if ( _TypeFieldInterp == 0 ) { GBFieldFile->setVisible(0); }
   else                         { GBFieldFile->setVisible(1); }
   GBAreaManagement->setVisible(1);
-  adjustSize();
+
   _aTypeRaff = 1 ;
   _aTypeDera = 0 ;
   _aTypeAdap = 0 ;
+//
+  adjustSize();
 }
 
 // ------------------------------------------------------------------------
@@ -283,7 +318,7 @@ void MonCreateHypothesis::PushZoneNew()
 // ------------------------------------------------------------------------
 {
   MESSAGE("Debut de MonCreateHypothesis::PushZoneNew")
-  MonCreateZone *aDlg = new MonCreateZone(this, TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName) ;
+  MonCreateZone *aDlg = new MonCreateZone(this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName) ;
   aDlg->show();
 }
 
@@ -294,14 +329,14 @@ void MonCreateHypothesis::PushZoneEdit()
   MESSAGE("Debut de MonCreateHypothesis::PushZoneEdit")
   int colonne = TWZone->currentColumn();
   QTableWidgetItem * monItem = TWZone->currentItem();
-  if (colonne !=2  or monItem == NULL)
+  if (colonne !=2  || monItem == NULL)
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_HYPO_ZONE_1") );
     return;
   }
   QString zoneName = monItem->text().trimmed();
-  MonEditZone *aDlg = new MonEditZone(this, TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen), _aCaseName, zoneName) ;
+  MonEditZone *aDlg = new MonEditZone(this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen), _aCaseName, zoneName) ;
   aDlg->show();
 }
 // ------------------------------------------------------------------------
@@ -310,7 +345,7 @@ void MonCreateHypothesis::PushZoneDelete()
 {
   MESSAGE("Debut de MonCreateHypothesis::PushZoneDelete")
   QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
-                        QObject::tr("HOM_INACTIVE_BUTTON") );
+                          QObject::tr("HOM_INACTIVE_BUTTON") );
   return;
 }
 
@@ -322,7 +357,7 @@ void MonCreateHypothesis::GetAllZones()
 // Par defaut, aucune n'est selectionnee
 {
   MESSAGE("Debut de GetAllZones") ;
-  HOMARD::listeZones_var mesZones = _myHomardGen->GetAllZones();
+  HOMARD::listeZones_var mesZones = myHomardGen->GetAllZonesName();
   int nbrow=TWZone->rowCount();
   for ( int row=0; row< nbrow; row++)
   {
@@ -390,7 +425,7 @@ QStringList MonCreateHypothesis::GetZonesChecked()
   int Pbm = 0 ;
   for ( int row=0; row< TWZone->rowCount(); row++)
   {
-    if ( ( TWZone->item( row, 0 )->checkState() == Qt::Checked ) and ( TWZone->item( row, 1 )->checkState() == Qt::Checked ) )
+    if ( ( TWZone->item( row, 0 )->checkState() == Qt::Checked ) && ( TWZone->item( row, 1 )->checkState() == Qt::Checked ) )
     {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                                 QObject::tr("HOM_HYPO_ZONE_3") );
@@ -450,8 +485,12 @@ void MonCreateHypothesis::AssocieFieldInterp()
 {
   if ( _TypeFieldInterp != 2 ) return;
   for ( int row=0; row< TWField->rowCount(); row++)
-      if ( TWField->item( row, 0 )->checkState() == Qt::Checked )
-      { _aHypothesis->AddFieldInterp(TWField->item(row, 1)->text().toStdString().c_str()); }
+  {
+    if ( TWField->item( row, 0 )->checkState() == Qt::Checked )
+    {
+      aHypothesis->AddFieldInterp(TWField->item(row, 1)->text().toStdString().c_str());
+    }
+  }
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetUniRaff()
@@ -488,7 +527,7 @@ void MonCreateHypothesis::SetFieldName()
 {
   MESSAGE("Debut de SetFieldName");
   _aFieldName=CBFieldName->currentText();
-  if (QString(_aFieldFile) == QString("") or QString(_aFieldName) == QString("") ) { return; }
+  if (QString(_aFieldFile) == QString("") || QString(_aFieldName) == QString("") ) { return; }
 
   int nbrow= TWCMP->rowCount() ;
   for ( int row=0; row < nbrow ; row++)
@@ -535,6 +574,7 @@ void MonCreateHypothesis::SetRPE()
   SpinBox_RPE->setEnabled(true);
   SpinBox_RRel->setEnabled(false);
   SpinBox_RAbs->setEnabled(false);
+  SpinBox_RMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetRRel()
@@ -546,6 +586,7 @@ void MonCreateHypothesis::SetRRel()
   SpinBox_RPE->setEnabled(false);
   SpinBox_RRel->setEnabled(true);
   SpinBox_RAbs->setEnabled(false);
+  SpinBox_RMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetRAbs()
@@ -557,6 +598,19 @@ void MonCreateHypothesis::SetRAbs()
   SpinBox_RPE->setEnabled(false);
   SpinBox_RRel->setEnabled(false);
   SpinBox_RAbs->setEnabled(true);
+  SpinBox_RMuSigma->setEnabled(false);
+}
+// ------------------------------------------------------------------------
+void MonCreateHypothesis::SetRMS()
+// ------------------------------------------------------------------------
+{
+  _aTypeRaff = 1 ;
+  _TypeThR = 4 ;
+  RBRMuSigma->setChecked(true);
+  SpinBox_RPE->setEnabled(false);
+  SpinBox_RRel->setEnabled(false);
+  SpinBox_RAbs->setEnabled(false);
+  SpinBox_RMuSigma->setEnabled(true);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetRNo()
@@ -568,6 +622,7 @@ void MonCreateHypothesis::SetRNo()
   SpinBox_RPE->setEnabled(false);
   SpinBox_RRel->setEnabled(false);
   SpinBox_RAbs->setEnabled(false);
+  SpinBox_RMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetCPE()
@@ -579,6 +634,7 @@ void MonCreateHypothesis::SetCPE()
   SpinBox_CPE->setEnabled(true);
   SpinBox_CRel->setEnabled(false);
   SpinBox_CAbs->setEnabled(false);
+  SpinBox_CMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetCRel()
@@ -590,6 +646,7 @@ void MonCreateHypothesis::SetCRel()
   SpinBox_CPE->setEnabled(false);
   SpinBox_CRel->setEnabled(true);
   SpinBox_CAbs->setEnabled(false);
+  SpinBox_CMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetCAbs()
@@ -601,6 +658,19 @@ void MonCreateHypothesis::SetCAbs()
   SpinBox_CPE->setEnabled(false);
   SpinBox_CRel->setEnabled(false);
   SpinBox_CAbs->setEnabled(true);
+  SpinBox_CMuSigma->setEnabled(false);
+}
+// ------------------------------------------------------------------------
+void MonCreateHypothesis::SetCMS()
+// ------------------------------------------------------------------------
+{
+  _aTypeDera = 1 ;
+  _TypeThC = 4 ;
+  RBCMuSigma->setChecked(true);
+  SpinBox_CPE->setEnabled(false);
+  SpinBox_CRel->setEnabled(false);
+  SpinBox_CAbs->setEnabled(false);
+  SpinBox_CMuSigma->setEnabled(true);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetCNo()
@@ -612,6 +682,7 @@ void MonCreateHypothesis::SetCNo()
   SpinBox_CPE->setEnabled(false);
   SpinBox_CRel->setEnabled(false);
   SpinBox_CAbs->setEnabled(false);
+  SpinBox_CMuSigma->setEnabled(false);
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetUCL2()
@@ -624,7 +695,8 @@ void MonCreateHypothesis::SetUCL2()
 void MonCreateHypothesis::SetUCInf()
 // ------------------------------------------------------------------------
 {
-  _UsCmpI = 1 ;
+  if ( TWCMP->rowCount() == 1 ) { _UsCmpI = 2 ; }
+  else                          { _UsCmpI = 1 ; }
   RBInf->setChecked(true);
 }
 // ------------------------------------------------------------------------
@@ -639,7 +711,7 @@ void MonCreateHypothesis::SetFiltrage()
 // ------------------------------------------------------------------------
 {
   if (!CBGroupe->isChecked()) return;
-  MonCreateListGroup *aDlg = new MonCreateListGroup(this, NULL, TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),_aCaseName, _aListeGroupes) ;
+  MonCreateListGroup *aDlg = new MonCreateListGroup(this, NULL, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen),_aCaseName, _aListeGroupes) ;
   aDlg->show();
 }
 
@@ -694,7 +766,7 @@ void MonCreateHypothesis::AssocieLesZones()
   for ( int i=0 ; i< _aListeZone.count() ; i++ )
   { if ( _aListeZone[i+1] == Raff ) { TypeUse =  1 ; }
     else                            { TypeUse = -1 ; }
-   _myHomardGen->AssociateHypoZone(_aHypothesisName.toStdString().c_str(), _aListeZone[i].toStdString().c_str(), TypeUse);
+    aHypothesis->AddZone(_aListeZone[i].toStdString().c_str(), TypeUse);
     i += 1 ;
   }
   MESSAGE( "Fin de AssocieLesZones" );
@@ -711,21 +783,23 @@ void MonCreateHypothesis::AssocieComposants()
   if ( _TypeThR == 1 ) { _ThreshR = SpinBox_RAbs->value();}
   if ( _TypeThR == 2 ) { _ThreshR = SpinBox_RRel->value();}
   if ( _TypeThR == 3 ) { _ThreshR = SpinBox_RPE->value(); }
+  if ( _TypeThR == 4 ) { _ThreshR = SpinBox_RMuSigma->value(); }
 
   _ThreshC = 0;
   if ( _TypeThC == 1 ) { _ThreshC = SpinBox_CAbs->value();}
   if ( _TypeThC == 2 ) { _ThreshC = SpinBox_CRel->value();}
   if ( _TypeThC == 3 ) { _ThreshC = SpinBox_CPE->value(); }
+  if ( _TypeThC == 4 ) { _ThreshC = SpinBox_CMuSigma->value(); }
 
   _aFieldName=CBFieldName->currentText();
-  _aHypothesis->SetField(CORBA::string_dup(_aFieldName.toStdString().c_str()) ) ;
-  _aHypothesis->SetRefinThr( _TypeThR, _ThreshR ) ;
-  _aHypothesis->SetUnRefThr( _TypeThC, _ThreshC ) ;
-  _aHypothesis->SetUseField( _UsField ) ;
-  _aHypothesis->SetUseComp( _UsCmpI ) ;
+  aHypothesis->SetField(CORBA::string_dup(_aFieldName.toStdString().c_str()) ) ;
+  if ( _TypeThR > 0 ) { aHypothesis->SetRefinThr( _TypeThR, _ThreshR ) ; }
+  if ( _TypeThC > 0 ) { aHypothesis->SetUnRefThr( _TypeThC, _ThreshC ) ; }
+  aHypothesis->SetUseField( _UsField ) ;
+  aHypothesis->SetUseComp( _UsCmpI ) ;
   _aListeComposant = GetListCompChecked() ;
   for ( int i=0 ; i< _aListeComposant.count() ; i++ )
-      { _aHypothesis->AddComp(_aListeComposant[i].toStdString().c_str()); }
+      { aHypothesis->AddComp(_aListeComposant[i].toStdString().c_str()); }
 };
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::AssocieLesGroupes()
@@ -737,7 +811,7 @@ void MonCreateHypothesis::AssocieLesGroupes()
   int i=0;
   for (it = _aListeGroupes.constBegin(); it != _aListeGroupes.constEnd(); it++)
      aSeqGroupe[i++]=(*it).toStdString().c_str();
-  _aHypothesis->SetGroups(aSeqGroupe);
+  aHypothesis->SetGroups(aSeqGroupe);
 
 }
 // ------------------------------------------------------------------------
@@ -749,8 +823,9 @@ void MonCreateHypothesis::SetFieldNo()
   else                   { GBFieldFile->setVisible(0); }
   TWField->setVisible(0);
 //
-   adjustSize();
   _TypeFieldInterp = 0 ;
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetFieldAll()
@@ -771,7 +846,8 @@ void MonCreateHypothesis::SetFieldAll()
   TWField->setVisible(0);
 //
   _TypeFieldInterp = 1 ;
-   adjustSize();
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetFieldChosen()
@@ -818,7 +894,8 @@ void MonCreateHypothesis::SetFieldChosen()
   TWField->setVisible(1);
 
   _TypeFieldInterp = 2 ;
-   adjustSize();
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateHypothesis::SetAdvanced()
@@ -827,19 +904,22 @@ void MonCreateHypothesis::SetAdvanced()
   MESSAGE("Debut de SetAdvanced ");
   if (CBAdvanced->isChecked())
   { GBAdvancedOptions->setVisible(1);
-    if (_aFieldFile != QString(""))
-    { GBAdapInit->setVisible(1) ;
-    }
-    else
-    { GBAdapInit->setVisible(0) ;
-    }
+    if (_aFieldFile != QString("")) { GBAdapInit->setVisible(1) ; }
+    else                            { GBAdapInit->setVisible(0) ; }
   }
   else
   { GBAdvancedOptions->setVisible(0);
     _NivMax = -1 ;
     _DiamMin = -1. ;
     _AdapInit = 0 ;
+    CBOutputLevel->setChecked(false);
+    CBOutputQuality->setChecked(false);
+    CBOutputDiameter->setChecked(false);
+    CBOutputParent->setChecked(false);
+    CBOutputVoisins->setChecked(false);
+    _ExtraOutput = 1 ;
   }
+//
   adjustSize();
 }
 // ------------------------------------------------------------------------
index a1271157b665b1152243a2243d9cbdaf726b38d1..20ee0e75acff0ec066ae07ed385a22140f466eb6 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATEHYPOTHESIS_H
 #define MON_CREATEHYPOTHESIS_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Hypothesis)
 
-#include <CreateHypothesis.h>
-#include <QDialog>
+#include "ui_CreateHypothesis.h"
+#include <QScrollArea>
 
 class MonCreateIteration;
-class MonCreateHypothesis : public QDialog, public Ui_CreateHypothesis
+class HOMARD_EXPORT MonCreateHypothesis : public QScrollArea, public Ui_CreateHypothesis
 {
     Q_OBJECT
 
@@ -50,7 +51,7 @@ protected :
 
     MonCreateIteration *_parent;
 
-    QString _aHypothesisName;
+    QString _Name;
     QString _aFieldFile ;
     QString _aFieldName;
     QString _aCaseName;
@@ -71,9 +72,10 @@ protected :
     int _NivMax;
     double _DiamMin;
     int _AdapInit;
+    int _ExtraOutput;
 
-    HOMARD::HOMARD_Gen_var _myHomardGen;
-    HOMARD::HOMARD_Hypothesis_var _aHypothesis;
+    HOMARD::HOMARD_Hypothesis_var aHypothesis;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     QStringList _aListeZone;
     QStringList _aListeComposant;
@@ -82,7 +84,7 @@ protected :
     virtual void InitConnect();
     virtual void InitFields();
     virtual void GetAllZones();
-    virtual void SetNewHypothesisName();
+    virtual void SetNewName();
 
     virtual void AssocieFieldInterp();
     virtual void AssocieLesZones();
@@ -105,10 +107,12 @@ public slots:
     virtual void SetRPE();
     virtual void SetRAbs();
     virtual void SetRRel();
+    virtual void SetRMS();
     virtual void SetRNo();
     virtual void SetCPE();
     virtual void SetCAbs();
     virtual void SetCRel();
+    virtual void SetCMS();
     virtual void SetCNo();
     virtual void SetUCL2();
     virtual void SetUCInf();
index fc3b05c572e2467c69af03f4e15d5f2cc24edbc4..147a2db10445afeb001cc3f9cf573850ae1bcbb5 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateIteration.h"
 #include "MonCreateHypothesis.h"
 #include "MonEditHypothesis.h"
@@ -31,36 +29,37 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
 
 // -----------------------------------------------------------------------------------------------------
 MonCreateIteration::MonCreateIteration(QWidget* parent, bool modal,
-                                       HOMARD::HOMARD_Gen_var myHomardGen, QString IterParentName ):
+                                       HOMARD::HOMARD_Gen_var myHomardGen0, QString IterParentName ):
 // -----------------------------------------------------------------------------------------------------
 /* Constructs a MonCreateIteration
  * Inherits from CasHomard
  * Sets attributes to default values
  */
-    QDialog(0),
+    QScrollArea(0),
     Ui_CreateIteration(),
-    _IterationName(""),
+    _Name(""),
     _IterParentName(IterParentName),
     _CaseName("")
     {
       MESSAGE("Constructeur");
-      _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
       setupUi(this);
-      setModal(modal);
+      if ( modal ) { setWindowModality(Qt::WindowModal); }
+      else         { setWindowModality(Qt::NonModal); }
       InitConnect();
 
-      SetNewIterationName();
+      SetNewName();
       GetHypotheses();
-      if (_IterParentName != QString(""))
-         { SetIterParentName(); }
-      else
-         {setModal(false); /* permet selection de l iteration dans l arbre d etude */}
+      if (_IterParentName != QString("")) { SetIterParentName(); }
+      else                                { setWindowModality(Qt::NonModal) ; /* permet selection de l'iteration dans l arbre d etude */}
       SetTSNo();
+//
+      adjustSize();
     }
-
 // ------------------------------------------------------------------------
 MonCreateIteration::~MonCreateIteration()
 // ------------------------------------------------------------------------
@@ -88,22 +87,21 @@ void MonCreateIteration::InitConnect()
 void MonCreateIteration::GetHypotheses()
 // ------------------------------------------------------------------------
 {
-     HOMARD::listeHypotheses_var  mesHypotheses = _myHomardGen->GetAllHypotheses();
+     HOMARD::listeHypotheses_var  mesHypotheses = myHomardGen->GetAllHypothesesName();
      for (int i=0; i<mesHypotheses->length(); i++)
      {
          CBHypothese->addItem(QString(mesHypotheses[i]));
      }
 }
-
 // ------------------------------------------------------------------------
 bool MonCreateIteration::PushOnApply()
 // ------------------------------------------------------------------------
 // Appele lorsque l'un des boutons Ok ou Apply est presse
 {
-  MESSAGE("MonCreateIteration::PushOnApply");
+  MESSAGE("PushOnApply");
 //
-  QString aIterationName = LEIterationName->text().trimmed();
-  if ( aIterationName == QString (""))
+  QString aName = LEName->text().trimmed();
+  if ( aName == QString (""))
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_ITER_NAME") );
@@ -130,10 +128,10 @@ bool MonCreateIteration::PushOnApply()
                               QObject::tr("HOM_ITER_HYPO") );
     return false;
   }
-  HOMARD::HOMARD_Hypothesis_var _myHypothesis = _myHomardGen->GetHypothesis(monHypoName.toStdString().c_str());
+  HOMARD::HOMARD_Hypothesis_var _myHypothesis = myHomardGen->GetHypothesis(monHypoName.toStdString().c_str());
   HOMARD::listeTypes_var ListTypes (_myHypothesis->GetAdapRefinUnRef());
   int TypeAdap = ListTypes[0];
-  if ( TypeAdap == 1 and LEFieldFile->text().trimmed() == QString("") )
+  if ( TypeAdap == 1 && LEFieldFile->text().trimmed() == QString("") )
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_ITER_FIELD_FILE") );
@@ -145,43 +143,42 @@ bool MonCreateIteration::PushOnApply()
   MESSAGE ("_IterParentName.toStdString " << _IterParentName.toStdString() );
 
 // Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom
-  if (_IterationName != aIterationName)
+  if (_Name != aName)
   {
     try
     {
-      _IterationName = aIterationName;
-      std::cerr << _IterationName.toStdString() << std::endl;
-      aIter = _myHomardGen->CreateIteration( \
-               CORBA::string_dup(_IterationName.toStdString().c_str()),
+      _Name = aName;
+      std::cerr << _Name.toStdString() << std::endl;
+      aIter = myHomardGen->CreateIteration( \
+               CORBA::string_dup(_Name.toStdString().c_str()),
                CORBA::string_dup(_IterParentName.toStdString().c_str()));
     }
     catch( SALOME::SALOME_Exception& S_ex )
     {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QString(CORBA::string_dup(S_ex.details.text)) );
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
        return false;
     }
   }
-
 // Mise en place des attributs
-  const char* IterName = aIter->GetName() ;
-  std::cerr << IterName << std::endl;
+  std::string IterName = aIter->GetName() ;
 
   if ( LEFieldFile->text().trimmed() != QString(""))
   {
     QString FieldFile=LEFieldFile->text().trimmed();
+    aIter->SetFieldFile(CORBA::string_dup(FieldFile.toStdString().c_str()));
     int rank = SpinBox_Rank->value();
     int step = SpinBox_TimeStep->value();
-    aIter->SetFieldFile(CORBA::string_dup(FieldFile.toStdString().c_str()));
-    aIter->SetTimeStepRank(step,rank);
+    if ( step == -2 ) { aIter->SetTimeStepRankLast(); }
+    else              { aIter->SetTimeStepRank(step,rank); }
   }
-  _myHomardGen->AssociateIterHypo (IterName, monHypoName.toStdString().c_str());
+  myHomardGen->AssociateIterHypo (IterName.c_str(), monHypoName.toStdString().c_str());
   aIter->SetMeshName(CORBA::string_dup(aMeshName_np1.toStdString().c_str()));
 
-  HOMARD_UTILS::updateObjBrowser();
+  HOMARD_UTILS::updateObjBrowser() ;
+
   return true;
 }
-
 // ------------------------------------------------------------------------
 void MonCreateIteration::PushOnOK()
 // ------------------------------------------------------------------------
@@ -189,14 +186,13 @@ void MonCreateIteration::PushOnOK()
      bool bOK = PushOnApply();
      if ( bOK )  this->close();
 }
-
 // ------------------------------------------------------------------------
 void MonCreateIteration::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_iteration.html"));
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_iteration.html"), QString(""), QString(LanguageShort.c_str()));
 }
-
 // ------------------------------------------------------------------------
 void MonCreateIteration::SetIterParentName()
 // ------------------------------------------------------------------------
@@ -206,7 +202,7 @@ void MonCreateIteration::SetIterParentName()
     if (_IterParentName == QString("")) { raise();return;};
   }
   _CaseName=HOMARD_QT_COMMUN::SelectionCasEtude();
-  HOMARD::HOMARD_Iteration_var aIterParent = _myHomardGen->GetIteration(_IterParentName.toStdString().c_str()) ;
+  HOMARD::HOMARD_Iteration_var aIterParent = myHomardGen->GetIteration(_IterParentName.toStdString().c_str()) ;
   QString MeshName = aIterParent->GetMeshName();
 
   LEMeshName_n->setText(MeshName);
@@ -215,34 +211,31 @@ void MonCreateIteration::SetIterParentName()
 
   LEIterationParentName->setText(_IterParentName);
 }
-
 // -------------------------------------------------
-void MonCreateIteration::SetNewIterationName()
+void MonCreateIteration::SetNewName()
 // --------------------------------------------------
 {
 // Recherche d'un nom par defaut qui n'existe pas encore
 
-  HOMARD::listeIterations_var  myIters=_myHomardGen->GetAllIterations();
+  HOMARD::listeIterations_var  MyObjects=myHomardGen->GetAllIterationsName();
   int num = 0;//
-  QString aIterationName="";
-  while (aIterationName=="" )
+  QString aName="";
+  while (aName=="" )
   {
-    aIterationName.setNum(num+1) ;
-    aIterationName.insert(0, QString("Iter_"));
-    for ( int i=0; i< myIters->length(); i++)
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Iter_"));
+    for ( int i=0; i< MyObjects->length(); i++)
     {
-      if ( aIterationName ==  QString((myIters)[i]))
+      if ( aName ==  QString((MyObjects)[i]))
       {
-          num=num+1;
-          aIterationName="";
-          break;
+        num ++ ;
+        aName = "" ;
+        break ;
       }
    }
   }
-  LEIterationName->setText(aIterationName);
+  LEName->setText(aName);
 }
-
-
 // ------------------------------------------------------------------------
 void MonCreateIteration::PushHypoEdit()
 // ------------------------------------------------------------------------
@@ -256,7 +249,7 @@ void MonCreateIteration::PushHypoEdit()
     return;
   }
   QString aFieldFile=LEFieldFile->text().trimmed();
-  MonEditHypothesis *HypoDlg = new MonEditHypothesis(this,TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),CBHypothese->currentText(), _CaseName, aFieldFile) ;
+  MonEditHypothesis *HypoDlg = new MonEditHypothesis(this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen),CBHypothese->currentText(), _CaseName, aFieldFile) ;
   HypoDlg->show();
 }
 
@@ -280,20 +273,19 @@ void MonCreateIteration::PushHypoNew()
   }
   if ( _CaseName == QString(""))
   {
-        _CaseName = _myHomardGen->GetCaseName(CORBA::string_dup(_IterParentName.toStdString().c_str()));
+    HOMARD::HOMARD_Iteration_var aIterParent = myHomardGen->GetIteration(_IterParentName.toStdString().c_str()) ;
+    _CaseName = aIterParent->GetCaseName();
   }
   QString aFieldFile=LEFieldFile->text().trimmed();
-  MonCreateHypothesis *HypoDlg = new MonCreateHypothesis(this,TRUE,HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),QString(""),_CaseName, aFieldFile) ;
+  MonCreateHypothesis *HypoDlg = new MonCreateHypothesis(this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen), QString(""), _CaseName, aFieldFile) ;
   HypoDlg->show();
 }
-
 // ------------------------------------------------------------------------
 void MonCreateIteration::SetFieldFile()
 // ------------------------------------------------------------------------
-
 {
   QString fileName0 = LEFieldFile->text().trimmed();
-  QString fileName = HOMARD_QT_COMMUN::PushNomFichier(false);
+  QString fileName = HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") ) ;
   if (fileName.isEmpty()) fileName = fileName0 ;
   LEFieldFile->setText(fileName);
   raise();
@@ -301,36 +293,47 @@ void MonCreateIteration::SetFieldFile()
 // ------------------------------------------------------------------------
 void MonCreateIteration::SetTSNo()
 // ------------------------------------------------------------------------
-// Par defaut, on declare que le pas de temps vaut -1
+// Si on ne tient pas compte du pas de temps, on declare que le pas de temps
+// vaut -1, valeur par defaut de med
 {
   Rank->setVisible(0);
   SpinBox_Rank->setVisible(0);
+  SpinBox_Rank->setValue(-1);
+
   TimeStep->setVisible(0);
   SpinBox_TimeStep->setVisible(0);
   SpinBox_TimeStep->setValue(-1);
+//
   adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateIteration::SetTSLast()
 // ------------------------------------------------------------------------
-// Par defaut, on declare que le pas de temps vaut -2
+// Si on choisit le dernier instant, on declare que le pas de temps vaut -2
 {
   Rank->setVisible(0);
   SpinBox_Rank->setVisible(0);
+  SpinBox_Rank->setValue(-2);
+
   TimeStep->setVisible(0);
   SpinBox_TimeStep->setVisible(0);
   SpinBox_TimeStep->setValue(-2);
+//
   adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonCreateIteration::SetTSChosen()
 // ------------------------------------------------------------------------
+// Si choisit un instant, on prepositionne a 0
 {
   Rank->setVisible(1);
   SpinBox_Rank->setVisible(1);
+  SpinBox_Rank->setValue(0);
+
   TimeStep->setVisible(1);
   SpinBox_TimeStep->setVisible(1);
-  SpinBox_TimeStep->setValue(1);
+  SpinBox_TimeStep->setValue(0);
+//
   adjustSize();
 }
 
index bb5e9bdd2ea45961c4b42157a8d02e361ffd1ef4..422bcf8f2fc2be8534b5779ea528a185ff9a7a21 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATEITERATION_H
 #define MON_CREATEITERATION_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Cas)
 
-#include <CreateIteration.h>
-#include <QDialog>
-#include <QWidget>
+#include "ui_CreateIteration.h"
+#include <QScrollArea>
 
-class MonCreateIteration : public QDialog, public Ui_CreateIteration
-{ 
+class HOMARD_EXPORT MonCreateIteration : public QScrollArea, public Ui_CreateIteration
+{
     Q_OBJECT
 
 public:
@@ -46,7 +46,7 @@ public:
 protected :
     MonCreateIteration( QWidget* parent, HOMARD::HOMARD_Gen_var myHomardGen, QString IterParentName );
 
-    QString _IterationName;
+    QString _Name;
     QString _IterParentName;
     QString _CaseName;
 
@@ -54,12 +54,12 @@ protected :
     HOMARD::HOMARD_Iteration_var aIter ;
     HOMARD::HOMARD_Iteration_var aIterParent ;
     HOMARD::HOMARD_Cas_var aCas ;
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
 
     virtual void InitConnect();
     virtual void GetHypotheses();
-    virtual void SetNewIterationName();
+    virtual void SetNewName();
 
 public slots:
     virtual void SetIterParentName();
index 53ee66294ec4370cc763824abf3f76f71c35f1a5..759c4dd9d2bf5e05cda623af75d8b82178cc7502 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateListGroup.h"
 #include "MonCreateHypothesis.h"
 #include "MonCreateBoundaryDi.h"
@@ -36,9 +34,11 @@ using namespace std;
 #include <SUIT_Session.h>
 #include <SUIT_ViewManager.h>
 
+using namespace std;
+
 // --------------------------------------------------------------------------------------------------------------
 MonCreateListGroup::MonCreateListGroup(MonCreateHypothesis* parentHyp, MonCreateBoundaryDi* parentBound, bool modal,
-                                       HOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName,  QStringList listeGroupesHypo) :
+                                       HOMARD::HOMARD_Gen_var myHomardGen0, QString aCaseName,  QStringList listeGroupesHypo) :
 // --------------------------------------------------------------------------------------------------------------
 //
     QDialog(0), Ui_CreateListGroup(),
@@ -48,7 +48,7 @@ MonCreateListGroup::MonCreateListGroup(MonCreateHypothesis* parentHyp, MonCreate
     _parentBound(parentBound)
 {
     MESSAGE("Debut de  MonCreateListGroup")
-     _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
+     myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
     setupUi(this);
     setModal(modal);
     InitConnect();
@@ -65,7 +65,7 @@ MonCreateListGroup::MonCreateListGroup(MonCreateHypothesis* parentHyp, MonCreate
     _parentHyp(parentHyp),
     _parentBound(parentBound)
 {
-    _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
+    myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen);
     setupUi(this);
     InitConnect();
 }
@@ -115,7 +115,8 @@ void MonCreateListGroup::PushOnOK()
 void MonCreateListGroup::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_hypothese.html"));
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_hypothese.html"), QString(""), QString(LanguageShort.c_str()));
 }
 // ------------------------------------------------------------------------
 void MonCreateListGroup::InitGroupes()
@@ -126,7 +127,7 @@ void MonCreateListGroup::InitGroupes()
       TWGroupe->removeRow(row);
   TWGroupe->setRowCount(0);
   if (_aCaseName == QString("")) { return; };
-  HOMARD::HOMARD_Cas_var monCas= _myHomardGen->GetCas(_aCaseName.toStdString().c_str());
+  HOMARD::HOMARD_Cas_var monCas= myHomardGen->GetCase(_aCaseName.toStdString().c_str());
   HOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
   for ( int i = 0; i < _listeGroupesCas->length(); i++ )
   {
index 321ddd442a5f779a3b2f2b3210a5f781492cd482..8751da3efc3ddb1db768186982c7d957622456e0 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATELISTGROUP_H
 #define MON_CREATELISTGROUP_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 
-#include <CreateListGroup.h>
+#include "ui_CreateListGroup.h"
 #include <QDialog>
 
 class MonCreateHypothesis;
 class MonCreateBoundaryDi;
-class MonCreateListGroup : public QDialog, public Ui_CreateListGroup
+class HOMARD_EXPORT MonCreateListGroup : public QDialog, public Ui_CreateListGroup
 {
     Q_OBJECT
 
@@ -43,7 +44,7 @@ public:
 
 protected :
 
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     MonCreateHypothesis * _parentHyp;
     MonCreateBoundaryDi * _parentBound;
diff --git a/src/HOMARDGUI/MonCreateYACS.cxx b/src/HOMARDGUI/MonCreateYACS.cxx
new file mode 100644 (file)
index 0000000..c405ec1
--- /dev/null
@@ -0,0 +1,342 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MonCreateYACS.h"
+#include "HOMARD.hxx"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include <utilities.h>
+
+#ifdef WIN32
+#include <direct.h>
+#endif
+using namespace std;
+
+// ----------------------------------------------------------------------
+MonCreateYACS::MonCreateYACS (bool modal, HOMARD::HOMARD_Gen_var myHomardGen0, QString CaseName ):
+// ----------------------------------------------------------------------
+/* Constructs a MonCreateYACS
+ * Sets attributes to default values
+ */
+// ----------------------------------------------------------------------
+  Ui_CreateYACS(),
+  _aCaseName(CaseName),
+  _aScriptFile(""),
+  _aDirName(""),
+  _aMeshFile(""),
+  _Type(1)
+  // Les valeurs de _Type, _MaxIter, _MaxNode, _MaxElem doivent etre les memes que celles dans HOMARD_Gen_i::CreateYACSSchema
+  // et doivent correspondre aux defauts des boutons
+  {
+//     MESSAGE("Debut du constructeur de MonCreateYACS");
+    myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+    setupUi(this);
+    if ( modal ) { setWindowModality(Qt::WindowModal); }
+    else         { setWindowModality(Qt::NonModal); }
+
+    InitConnect();
+
+    SetNewName() ;
+
+    if (_aCaseName != QString("")) { SetCaseName(); }
+    else                           { setWindowModality(Qt::NonModal); /* permet selection du cas dans l arbre d etude */}
+//
+//  Les valeurs definies dans les preferences
+    _MaxIter = myHomardGen->GetYACSMaxIter();
+    _MaxNode = myHomardGen->GetYACSMaxNode();
+    _MaxElem = myHomardGen->GetYACSMaxElem();
+    MESSAGE ("Valeur par defaut de MaxIter = " << _MaxIter<<", MaxNode = "<< _MaxNode<<", MaxElem = "<< _MaxElem);
+    SpinBoxMaxIter->setValue(_MaxIter) ;
+    SpinBoxMaxNode->setValue(_MaxNode) ;
+    SpinBoxMaxElem->setValue(_MaxElem) ;
+//
+    adjustSize();
+  }
+
+// ----------------------------------------------------------------------
+MonCreateYACS::MonCreateYACS(HOMARD::HOMARD_Gen_var myHomardGen0,
+                             QString caseName):
+// ----------------------------------------------------------------------
+// Constructeur appele par MonEditYACS
+//
+myHomardGen(myHomardGen0),
+_Name (""),
+Chgt (false)
+{
+//       MESSAGE("Debut du constructeur de MonCreateYACS appele par MonEditYACS");
+  setupUi(this) ;
+
+  setWindowModality(Qt::WindowModal);
+  InitConnect() ;
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+MonCreateYACS::~MonCreateYACS()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( PBCaseName,     SIGNAL(pressed()), this, SLOT(SetCaseName()));
+    connect( PBScriptFile,   SIGNAL(pressed()), this, SLOT(SetScriptFile()));
+    connect( PBDir,          SIGNAL(pressed()), this, SLOT(SetDirName()));
+    connect( PBMeshFile,     SIGNAL(pressed()), this, SLOT(SetMeshFile()));
+
+    connect( RBConstant,     SIGNAL(clicked()), this, SLOT(SetConstant()));
+    connect( RBVariable,     SIGNAL(clicked()), this, SLOT(SetVariable()));
+
+    connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+    connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+}
+// -------------------------------
+bool MonCreateYACS::PushOnApply()
+// --------------------------------
+{
+  MESSAGE("PushOnApply");
+
+// Le fichier du script
+  QString aFileName=LEScriptFile->text().trimmed();
+  if (aFileName ==QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SCRIPT_FILE") );
+    return false;
+  }
+
+// Le repertoire de calcul
+  QString aDirName=LEDirName->text().trimmed();
+  if (aDirName == QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_4") );
+    return false;
+  }
+  if ( aDirName != _aDirName)
+  { QString CaseNameDir = myHomardGen->VerifieDir( aDirName.toStdString().c_str()) ;
+    if ( CaseNameDir != "" )
+    {
+      QString texte ;
+      texte = QObject::tr("HOM_CASE_DIRECTORY_2") + CaseNameDir ;
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                texte );
+      return false;
+    }
+  }
+  if (CHDIR(aDirName.toStdString().c_str()) != 0)
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_3") );
+    return false;
+  }
+
+// Le fichier du tout premier maillage
+  aFileName=LEMeshFile->text().trimmed();
+  if (aFileName ==QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_MESH") );
+    return false;
+  }
+  QString aMeshName = HOMARD_QT_COMMUN::LireNomMaillage(aFileName);
+  if (aMeshName == "" )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MED_FILE_2") );
+    return false;
+  }
+
+  bool bOK = CreateOrUpdate() ;
+
+  if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
+
+  return bOK;
+}
+// ---------------------------------------------------
+bool MonCreateYACS:: CreateOrUpdate()
+//----------------------------------------------------
+//  Creation ou modification du schema
+{
+  MESSAGE("CreateOrUpdate");
+  bool bOK = true ;
+
+  // 1. Verification des donnees
+  // 1.1. Le cas
+  if ( _aCaseName == QString (""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_NAME") );
+    return false;
+  }
+  // 1.2. Les donnees
+  QString aScriptFile=LEScriptFile->text().trimmed();
+  if ( aScriptFile != _aScriptFile )
+  {
+    _aScriptFile = aScriptFile ;
+    Chgt = true ;
+  }
+  QString aDirName=LEDirName->text().trimmed();
+  if ( aDirName != _aDirName )
+  {
+    _aDirName = aDirName ;
+    Chgt = true ;
+  }
+  QString aMeshFile=LEMeshFile->text().trimmed();
+  if ( aMeshFile != _aMeshFile )
+  {
+    _aMeshFile = aMeshFile ;
+    Chgt = true ;
+  }
+
+  // 2. Creation de l'objet CORBA
+  try
+  {
+    _Name=LEName->text().trimmed();
+    aYACS=myHomardGen->CreateYACSSchema(CORBA::string_dup(_Name.toStdString().c_str()), CORBA::string_dup(_aCaseName.toStdString().c_str()), CORBA::string_dup(_aScriptFile.toStdString().c_str()), CORBA::string_dup(_aDirName.toStdString().c_str()), CORBA::string_dup(_aMeshFile.toStdString().c_str()));
+  }
+  catch( SALOME::SALOME_Exception& S_ex )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+    bOK = false;
+  }
+
+  // 3. Options
+  if ( bOK )
+  {
+  // 3.1. Le type du schema
+    aYACS->SetType(_Type) ;
+
+  // 3.2. Les maximums
+    _MaxIter = SpinBoxMaxIter->value() ;
+    aYACS->SetMaxIter(_MaxIter) ;
+
+    _MaxNode = SpinBoxMaxNode->value() ;
+    aYACS->SetMaxNode(_MaxNode) ;
+
+    _MaxElem = SpinBoxMaxElem->value() ;
+    aYACS->SetMaxElem(_MaxElem) ;
+
+  }
+
+  // 4. Ecriture du fichier
+  if ( bOK )
+  {
+    int codret = aYACS->Write() ;
+    if ( codret != 0 ) { bOK = false ; }
+  }
+
+  return bOK;
+}
+// ---------------------------
+void MonCreateYACS::PushOnOK()
+// ---------------------------
+{
+  bool bOK = PushOnApply();
+  if ( bOK ) this->close();
+}
+//------------------------------
+void MonCreateYACS::PushOnHelp()
+//-------------------------------
+{
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("yacs.html"), QString(""), QString(LanguageShort.c_str()));
+}
+// -------------------------------------------------
+void MonCreateYACS::SetNewName()
+// --------------------------------------------------
+{
+
+  HOMARD::listeYACSs_var MyObjects = myHomardGen->GetAllYACSsName();
+  int num = 0; QString aName="";
+  while (aName == QString("") )
+  {
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("YACS_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
+    {
+      if ( aName ==  QString(MyObjects[i]))
+      {
+        num ++ ;
+        aName = "" ;
+        break ;
+      }
+   }
+  }
+  LEName->setText(aName);
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetCaseName()
+// ------------------------------------------------------------------------
+{
+  MESSAGE ("SetCaseName avec _aCaseName = " << _aCaseName.toStdString() );
+  if (_aCaseName == QString(""))
+  {
+    _aCaseName=HOMARD_QT_COMMUN::SelectionArbreEtude(QString("CasHomard"), 1);
+    if (_aCaseName == QString("")) { raise();return;};
+  }
+  LECaseName->setText(_aCaseName);
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetDirName()
+// ------------------------------------------------------------------------
+{
+  QString aDirName=QFileDialog::getExistingDirectory ();
+  if (!(aDirName.isEmpty()))LEDirName->setText(aDirName);
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetScriptFile()
+// ------------------------------------------------------------------------
+{
+  QString fileName0 = LEScriptFile->text().trimmed();
+  QString fileName = HOMARD_QT_COMMUN::PushNomFichier( false, QString("py") ) ;
+  if (fileName.isEmpty()) fileName = fileName0 ;
+  LEScriptFile->setText(fileName);
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetMeshFile()
+// ------------------------------------------------------------------------
+{
+  QString fileName0 = LEMeshFile->text().trimmed();
+  QString fileName = HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") ) ;
+  if (fileName.isEmpty()) fileName = fileName0 ;
+  LEMeshFile->setText(fileName);
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetConstant()
+// ------------------------------------------------------------------------
+{
+  _Type = 1 ;
+}
+// ------------------------------------------------------------------------
+void MonCreateYACS::SetVariable()
+// ------------------------------------------------------------------------
+{
+  _Type = 2 ;
+}
diff --git a/src/HOMARDGUI/MonCreateYACS.h b/src/HOMARDGUI/MonCreateYACS.h
new file mode 100644 (file)
index 0000000..f251e55
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MON_CREATEYACS_H
+#define MON_CREATEYACS_H
+
+#include "HOMARDGUI_Exports.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+#include CORBA_CLIENT_HEADER(HOMARD_Cas)
+
+#include "ui_CreateYACS.h"
+#include <QScrollArea>
+
+class HOMARD_EXPORT MonCreateYACS : public QScrollArea, public Ui_CreateYACS
+{
+    Q_OBJECT
+
+  public:
+    MonCreateYACS( bool modal, HOMARD::HOMARD_Gen_var myHomardGen, QString CaseName);
+    virtual ~MonCreateYACS();
+
+  protected :
+    MonCreateYACS( HOMARD::HOMARD_Gen_var myHomardGen, QString CaseName);
+
+    QString _Name;
+    QString _aCaseName;
+    QString _aScriptFile;
+    QString _aDirName;
+    QString _aMeshFile;
+
+    int _Type;
+    int _MaxIter;
+    int _MaxNode;
+    int _MaxElem;
+
+    bool Chgt;
+
+    HOMARD::HOMARD_YACS_var aYACS;
+    HOMARD::HOMARD_Gen_var myHomardGen;
+
+    virtual void InitConnect();
+    virtual bool CreateOrUpdate();
+
+  public slots:
+    virtual void SetNewName();
+
+    virtual void SetCaseName();
+    virtual void SetDirName();
+
+    virtual void SetScriptFile();
+    virtual void SetMeshFile();
+
+//     virtual void SetType(int Type);
+    virtual void SetConstant();
+    virtual void SetVariable();
+
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+};
+
+#endif // MON_CREATEYACS_H
index 86c71d9ef5c1da923b937b7e46a5f0957c8ecc60..2c823168273926cc944a846e4086c777b15770e6 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonCreateZone.h"
 #include "MonCreateHypothesis.h"
 
@@ -36,21 +34,23 @@ using namespace std;
 #include <SUIT_Session.h>
 #include <SUIT_ViewManager.h>
 
-// ------------------------------------------------------------------------------------------------------------------------
+using namespace std;
+
+// ----------------------------------------------------------------------
 MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, bool modal,
-                             HOMARD::HOMARD_Gen_var myHomardGen,
+                             HOMARD::HOMARD_Gen_var myHomardGen0,
                              QString caseName) :
-// ------------------------------------------------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------
 /* Constructs a MonCreateZone
    appele pour une vraie creation
    initialise une boite et non une sphere
 */
     QDialog(0), Ui_CreateZone(),
     _parent(parent),
-    _aZoneName (""),
+    _Name (""),
     _aCaseName(caseName),
     _Orient(0),
-    _ZoneType(2),
+    _Type(2),
     _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
     _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0),
     _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0),
@@ -61,31 +61,31 @@ MonCreateZone::MonCreateZone(MonCreateHypothesis* parent, bool modal,
     Chgt (false)
     {
       MESSAGE("Constructeur") ;
-      _myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen) ;
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0) ;
       setupUi(this) ;
       setModal(modal) ;
       InitConnect( ) ;
 
-      SetNewZoneName() ;
+      SetNewName() ;
       InitValZone() ;           // Cherche les valeurs de la boite englobante le maillage
       InitMinMax() ;            // Initialise les bornes des boutons
       SetBox() ;                // Propose une boite en premier choix
 
     }
-// --------------------------------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------
 MonCreateZone::MonCreateZone(MonCreateHypothesis* parent,
-                             HOMARD::HOMARD_Gen_var myHomardGen,
+                             HOMARD::HOMARD_Gen_var myHomardGen0,
                              QString caseName):
-// --------------------------------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------
 // Constructeur appele par MonEditZone
 //
     QDialog(0), Ui_CreateZone(),
-     _myHomardGen(myHomardGen),
+     myHomardGen(myHomardGen0),
     _parent(parent),
-    _aZoneName (""),
+    _Name (""),
     _aCaseName(caseName),
     _Orient(0),
-    _ZoneType(2),
+    _Type(2),
     _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
     _ZoneXcentre(0), _ZoneYcentre(0), _ZoneZcentre(0), _ZoneRayon(0),
     _ZoneXmin(0), _ZoneXmax(0), _ZoneYmin(0), _ZoneYmax(0), _ZoneZmin(0), _ZoneZmax(0),
@@ -131,7 +131,7 @@ void MonCreateZone::InitValZone()
 //
   if (_aCaseName == QString("")) { return; }
 
-  HOMARD::HOMARD_Cas_var aCas = _myHomardGen->GetCas(_aCaseName.toStdString().c_str()) ;
+  HOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase(_aCaseName.toStdString().c_str()) ;
   HOMARD::extrema_var  MesExtremes = aCas->GetBoundingBox() ;
   int num = MesExtremes->length() ;
   ASSERT(num == 10) ;
@@ -199,19 +199,19 @@ void MonCreateZone::InitValZone()
 
   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ) ; }
   else                { pix = resMgr->loadPixmap( "HOMARD", "disk.png" ) ;
-                        RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8));
-                        TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
-                        TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
-                        TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); }
+                        RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0));
+                        TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0));
+                        TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0));
+                        TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0)); }
   IS=QIcon(pix) ;
   RBCylinder->setIcon(IS) ;
 
   if ( _Orient == 0 ) { pix = resMgr->loadPixmap( "HOMARD", "pipe.png" ) ; }
   else                { pix = resMgr->loadPixmap( "HOMARD", "diskwithhole.png" ) ;
-                        RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8));
-                        TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
-                        TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
-                        TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8)); }
+                        RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0));
+                        TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0));
+                        TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0));
+                        TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0)); }
   IS=QIcon(pix) ;
   RBPipe->setIcon(IS) ;
 
@@ -287,13 +287,9 @@ void MonCreateZone::InitMinMax()
     }
 // Rayons
     SpinBox_Rayon->setSingleStep(_Rayon/10.) ;
-    SpinBox_Rayon->setMinimum(0.) ;
     SpinBox_Radius->setSingleStep(_Rayon/10.) ;
-    SpinBox_Radius->setMinimum(0.) ;
     SpinBox_Radius_int->setSingleStep(_Rayon/20.) ;
-    SpinBox_Radius_int->setMinimum(0.) ;
     SpinBox_Radius_ext->setSingleStep(_Rayon/10.) ;
-    SpinBox_Radius_ext->setMinimum(0.) ;
 // Axe et hauteur
 // Si une coordonnee est constante, inutile de demander l'axe et la hauteur
     if ( _Orient > 0) {
@@ -315,9 +311,7 @@ void MonCreateZone::InitMinMax()
       TLHaut_p->setVisible(0) ;
     }
     else {
-      SpinBox_Haut->setMinimum(0.) ;
       SpinBox_Haut->setSingleStep(_Rayon/10.) ;
-      SpinBox_Haut_p->setMinimum(0.) ;
       SpinBox_Haut_p->setSingleStep(_Rayon/10.) ;
     }
 }
@@ -327,15 +321,14 @@ bool MonCreateZone::PushOnApply()
 // Appele lorsque l'un des boutons Ok ou Apply est presse
 //
 {
-  std::cerr << LEZoneName->text().trimmed().toStdString() << std::endl;
-  if (LEZoneName->text().trimmed()=="")
+  if (LEName->text().trimmed()=="")
   {
     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                               QObject::tr("HOM_ZONE_NAME") ) ;
     return false;
   }
 
-  switch (_ZoneType)
+  switch (_Type)
   {
     case 11 : // il s agit d un rectangle
     { }
@@ -345,11 +338,11 @@ bool MonCreateZone::PushOnApply()
     { }
     case 2 : // il s agit d un parallelipipede rectangle
     {
-      if (  (_ZoneXmin != SpinBox_Xmini->value()) or
-            (_ZoneXmax != SpinBox_Xmaxi->value()) or
-            (_ZoneYmin != SpinBox_Ymini->value()) or
-            (_ZoneYmax != SpinBox_Ymaxi->value()) or
-            (_ZoneZmin != SpinBox_Zmini->value()) or
+      if (  (_ZoneXmin != SpinBox_Xmini->value()) ||
+            (_ZoneXmax != SpinBox_Xmaxi->value()) ||
+            (_ZoneYmin != SpinBox_Ymini->value()) ||
+            (_ZoneYmax != SpinBox_Ymaxi->value()) ||
+            (_ZoneZmin != SpinBox_Zmini->value()) ||
             (_ZoneZmax   != SpinBox_Zmaxi->value()) )
       {
         Chgt = true;
@@ -361,9 +354,9 @@ bool MonCreateZone::PushOnApply()
     }
     case 4 : // il s agit d une sphere
     {
-      if (  (_ZoneXcentre != SpinBox_Xcentre->value()) or
-            (_ZoneYcentre != SpinBox_Ycentre->value()) or
-            (_ZoneZcentre != SpinBox_Zbase->value())   or
+      if (  (_ZoneXcentre != SpinBox_Xcentre->value()) ||
+            (_ZoneYcentre != SpinBox_Ycentre->value()) ||
+            (_ZoneZcentre != SpinBox_Zbase->value())   ||
             (_ZoneRayon   != SpinBox_Rayon->value()) )
       {
         Chgt = true;
@@ -382,13 +375,13 @@ bool MonCreateZone::PushOnApply()
     { }
     case 5 : // il s agit d un cylindre
     {
-      if (  (_ZoneXcentre != SpinBox_Xbase->value())  or
-            (_ZoneYcentre != SpinBox_Ybase->value())  or
-            (_ZoneZcentre != SpinBox_Zbase->value())  or
-            (_ZoneRayon   != SpinBox_Radius->value()) or
-            (_ZoneHaut    != SpinBox_Haut->value())   or
-            (_ZoneXaxis   != SpinBox_Xaxis->value())  or
-            (_ZoneYaxis   != SpinBox_Yaxis->value())  or
+      if (  (_ZoneXcentre != SpinBox_Xbase->value())  ||
+            (_ZoneYcentre != SpinBox_Ybase->value())  ||
+            (_ZoneZcentre != SpinBox_Zbase->value())  ||
+            (_ZoneRayon   != SpinBox_Radius->value()) ||
+            (_ZoneHaut    != SpinBox_Haut->value())   ||
+            (_ZoneXaxis   != SpinBox_Xaxis->value())  ||
+            (_ZoneYaxis   != SpinBox_Yaxis->value())  ||
             (_ZoneZaxis   != SpinBox_Zaxis->value()) )
       {
         Chgt = true;
@@ -411,14 +404,14 @@ bool MonCreateZone::PushOnApply()
     { }
     case 7 : // il s agit d un tuyau
     {
-      if (  (_ZoneXcentre  != SpinBox_Xbase_p->value())  or
-            (_ZoneYcentre  != SpinBox_Ybase_p->value())  or
-            (_ZoneZcentre  != SpinBox_Zbase_p->value())  or
-            (_ZoneRayonInt != SpinBox_Radius_int->value()) or
-            (_ZoneRayon    != SpinBox_Radius_ext->value()) or
-            (_ZoneHaut     != SpinBox_Haut_p->value())   or
-            (_ZoneXaxis    != SpinBox_Xaxis_p->value())  or
-            (_ZoneYaxis    != SpinBox_Yaxis_p->value())  or
+      if (  (_ZoneXcentre  != SpinBox_Xbase_p->value())  ||
+            (_ZoneYcentre  != SpinBox_Ybase_p->value())  ||
+            (_ZoneZcentre  != SpinBox_Zbase_p->value())  ||
+            (_ZoneRayonInt != SpinBox_Radius_int->value()) ||
+            (_ZoneRayon    != SpinBox_Radius_ext->value()) ||
+            (_ZoneHaut     != SpinBox_Haut_p->value())   ||
+            (_ZoneXaxis    != SpinBox_Xaxis_p->value())  ||
+            (_ZoneYaxis    != SpinBox_Yaxis_p->value())  ||
             (_ZoneZaxis    != SpinBox_Zaxis_p->value()) )
       {
         Chgt = true;
@@ -438,25 +431,25 @@ bool MonCreateZone::PushOnApply()
 
 // Controles
 // Pour un rectangle ou un parallelepipede :
-  if ( ( _ZoneType >= 11 and _ZoneType <= 13 ) or _ZoneType == 2 )
+  if ( ( _Type >= 11 && _Type <= 13 ) || _Type == 2 )
   {
-    if ((_ZoneXmin >= _ZoneXmax) and (_Xincr > 0)) {
+    if ((_ZoneXmin >= _ZoneXmax) && (_Xincr > 0)) {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                                 QObject::tr("HOM_ZONE_LIMIT").arg("X") ) ;
       return false; }
 
-    if  ((_ZoneYmin >= _ZoneYmax) and (_Yincr > 0)) {
+    if  ((_ZoneYmin >= _ZoneYmax) && (_Yincr > 0)) {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                                 QObject::tr("HOM_ZONE_LIMIT").arg("Y") ) ;
       return false; }
 
-    if ((_ZoneZmin >= _ZoneZmax) and (_Zincr > 0)) {
+    if ((_ZoneZmin >= _ZoneZmax) && (_Zincr > 0)) {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
                                 QObject::tr("HOM_ZONE_LIMIT").arg("Z") ) ;
       return false; }
   }
 // L'axe pour un cylindre ou un tuyau :
-  if ( _ZoneType == 5 or _ZoneType == 7 )
+  if ( _Type == 5 || _Type == 7 )
   {
     double daux = _ZoneXaxis*_ZoneXaxis + _ZoneYaxis*_ZoneYaxis + _ZoneZaxis*_ZoneZaxis ;
     if ( daux < 0.0000001 )
@@ -467,7 +460,7 @@ bool MonCreateZone::PushOnApply()
     }
   }
 // Rayons pour disque avec trou ou un tuyau :
-  if ( ( _ZoneType >= 61 and _ZoneType <= 63 ) or _ZoneType == 7 )
+  if ( ( _Type >= 61 && _Type <= 63 ) || _Type == 7 )
   {
     if ( _ZoneRayonInt >= _ZoneRayon )
     {
@@ -477,6 +470,9 @@ bool MonCreateZone::PushOnApply()
     }
   }
   bool bOK = CreateOrUpdateZone() ;
+
+  if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
+
   return bOK;
 
 }
@@ -485,85 +481,94 @@ bool MonCreateZone:: CreateOrUpdateZone()
 //----------------------------------------------------
 //  Creation de la zone
 {
-  MESSAGE("CreateOrUpdateZone _ZoneType ="<<_ZoneType);
-  if (_aZoneName != LEZoneName->text().trimmed())
+  MESSAGE("CreateOrUpdateZone _Type ="<<_Type);
+  if (_Name != LEName->text().trimmed())
   {
-    _aZoneName = LEZoneName->text().trimmed() ;
-    switch (_ZoneType)
+    _Name = LEName->text().trimmed() ;
+    try
     {
-      case 11 : // il s agit d un rectangle
-      { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _Orient );
-        break;
-      }
-      case 12 : // il s agit d un rectangle
-      { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax, _Orient );
-        break;
-      }
-      case 13 : // il s agit d un rectangle
-      { aZone = _myHomardGen->CreateZoneBox2D(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneZmin, _ZoneZmax, _ZoneXmin, _ZoneXmax, _Orient );
-        break;
-      }
-      case 2 : // il s agit d un parallelepipede
-      { aZone = _myHomardGen->CreateZoneBox(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax );
-        break;
-      }
-      case 4 : // il s agit d une sphere
-      { aZone = _myHomardGen->CreateZoneSphere(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon );
-        break;
-      }
-      case 31 : // il s agit d un disque issu d'un cylindre
-      { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _Orient );
-        break;
+      switch (_Type)
+      {
+        case 11 : // il s agit d un rectangle
+        { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _Orient );
+          break;
         }
-      case 32 : // il s agit d un disque issu d'un cylindre
-      { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _Orient );
-        break;
-      }
-      case 33 : // il s agit d un disque issu d'un cylindre
-      { aZone = _myHomardGen->CreateZoneDisk(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _Orient );
-        break;
-      }
-      case 5 : // il s agit d un cylindre
-      { aZone = _myHomardGen->CreateZoneCylinder(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut );
-        break;
-      }
-      case 61 : // il s agit d un disque avec trou
-      { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
-        break;
+        case 12 : // il s agit d un rectangle
+        { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax, _Orient );
+          break;
+        }
+        case 13 : // il s agit d un rectangle
+        { aZone = myHomardGen->CreateZoneBox2D(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneZmin, _ZoneZmax, _ZoneXmin, _ZoneXmax, _Orient );
+          break;
         }
-      case 62 : // il s agit d un disque avec trou
-      { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
-        break;
+        case 2 : // il s agit d un parallelepipede
+        { aZone = myHomardGen->CreateZoneBox(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXmin, _ZoneXmax, _ZoneYmin, _ZoneYmax, _ZoneZmin, _ZoneZmax );
+          break;
+        }
+        case 4 : // il s agit d une sphere
+        { aZone = myHomardGen->CreateZoneSphere(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon );
+          break;
+        }
+        case 31 : // il s agit d un disque issu d'un cylindre
+        { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _Orient );
+          break;
+          }
+        case 32 : // il s agit d un disque issu d'un cylindre
+        { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _Orient );
+          break;
         }
-      case 63 : // il s agit d un disque avec trou
-      { aZone = _myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
-        break;
+        case 33 : // il s agit d un disque issu d'un cylindre
+        { aZone = myHomardGen->CreateZoneDisk(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _Orient );
+          break;
         }
-      case 7 : // il s agit d un tuyau
-      { aZone = _myHomardGen->CreateZonePipe(CORBA::string_dup(_aZoneName.toStdString().c_str()), \
-        _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt );
-        break;
+        case 5 : // il s agit d un cylindre
+        { aZone = myHomardGen->CreateZoneCylinder(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut );
+          break;
         }
+        case 61 : // il s agit d un disque avec trou
+        { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXcentre, _ZoneYcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
+          break;
+          }
+        case 62 : // il s agit d un disque avec trou
+        { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneYcentre, _ZoneZcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
+          break;
+          }
+        case 63 : // il s agit d un disque avec trou
+        { aZone = myHomardGen->CreateZoneDiskWithHole(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneZcentre, _ZoneXcentre, _ZoneRayon, _ZoneRayonInt, _Orient );
+          break;
+          }
+        case 7 : // il s agit d un tuyau
+        { aZone = myHomardGen->CreateZonePipe(CORBA::string_dup(_Name.toStdString().c_str()), \
+          _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayon, _ZoneHaut, _ZoneRayonInt );
+          break;
+          }
+      }
     }
-    _parent->addZoneinTWZone(_aZoneName) ;
-  }
+    catch( SALOME::SALOME_Exception& S_ex )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false ;
+    }
+    _parent->addZoneinTWZone(_Name) ;
 // Mise en place des attributs
-  aZone->SetLimit(_Xincr, _Yincr, _Zincr) ;
+    aZone->SetLimit(_Xincr, _Yincr, _Zincr) ;
 
-  HOMARD_UTILS::updateObjBrowser() ;
-  return true;
+    return true;
+  }
+  else { return false ; }
 }
 // ------------------------------------------------------------------------
 void MonCreateZone::PushOnOK()
@@ -575,33 +580,33 @@ void MonCreateZone::PushOnOK()
 void MonCreateZone::PushOnHelp()
 // ------------------------------------------------------------------------
 {
-  HOMARD_UTILS::PushOnHelp(QString("gui_create_zone.html") ) ;
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_zone.html"), QString(""), QString(LanguageShort.c_str()));
 }
 
 // -----------------------------------
-void MonCreateZone::SetNewZoneName()
+void MonCreateZone::SetNewName()
 // -----------------------------------
 {
 // Recherche d'un nom par defaut qui n'existe pas encore
 
-  HOMARD::listeZones_var  MyZones = _myHomardGen->GetAllZones() ;
-  int num = 0; QString aZoneName="";
-  while (aZoneName=="" )
+  HOMARD::listeZones_var  MyObjects = myHomardGen->GetAllZonesName() ;
+  int num = 0; QString aName="";
+  while (aName=="" )
   {
-    aZoneName.setNum(num+1) ;
-    aZoneName.insert(0, QString("Zone_")) ;
-    for ( int i=0; i<MyZones->length() ; i++)
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Zone_")) ;
+    for ( int i=0; i<MyObjects->length() ; i++)
     {
-      if ( aZoneName ==  QString(MyZones[i]))
+      if ( aName ==  QString(MyObjects[i]))
       {
-          num=num+1;
-          aZoneName="";
-          break;
+        num ++ ;
+        aName = "" ;
+        break ;
       }
    }
   }
-  LEZoneName->clear() ;
-  LEZoneName->insert(aZoneName) ;
+  LEName->setText(aName);
 }
 // ------------------------------------------------------------------------
 void MonCreateZone::SetBox()
@@ -612,18 +617,18 @@ void MonCreateZone::SetBox()
   gBCylindre->setVisible(0) ;
   gBPipe->setVisible(0) ;
   adjustSize() ;
-  _ZoneType=2;
+  _Type=2;
 // Sachant que l'increment est le 1/100eme de l'ecart (min/max), cela revient
 // a initialiser la boite sur une boite 'centrale' comprise entre 2/5 et 3/5
   if ( _Xincr > 0 ) { SpinBox_Xmini->setValue(_Xcentre-10*_Xincr) ;
                       SpinBox_Xmaxi->setValue(_Xcentre+10*_Xincr) ; }
-  else { _ZoneType=12 ; }
+  else { _Type=12 ; }
   if ( _Yincr > 0 ) { SpinBox_Ymini->setValue(_Ycentre-10*_Yincr) ;
                       SpinBox_Ymaxi->setValue(_Ycentre+10*_Yincr) ; }
-  else { _ZoneType=13 ; }
+  else { _Type=13 ; }
   if ( _Zincr > 0 ) { SpinBox_Zmini->setValue(_Zcentre-10*_Zincr) ;
                       SpinBox_Zmaxi->setValue(_Zcentre+10*_Zincr) ; }
-  else { _ZoneType=11 ; }
+  else { _Type=11 ; }
 }
 // ------------------------------------------------------------------------
 void MonCreateZone::SetSphere()
@@ -635,7 +640,7 @@ void MonCreateZone::SetSphere()
   gBCylindre->setVisible(0) ;
   gBPipe->setVisible(0) ;
   adjustSize() ;
-  _ZoneType=4;
+  _Type=4;
   SpinBox_Xcentre->setValue(_Xcentre) ;
   SpinBox_Ycentre->setValue(_Ycentre) ;
   SpinBox_Zcentre->setValue(_Zcentre) ;
@@ -652,16 +657,16 @@ void MonCreateZone::SetCylinder()
   gBCylindre->setVisible(1) ;
   gBPipe->setVisible(0) ;
   adjustSize() ;
-  _ZoneType=5;
+  _Type=5;
   if ( _Xincr > 0 ) { SpinBox_Xbase->setValue(_Xcentre) ;
                       SpinBox_Xaxis->setValue(0.) ; }
-  else { _ZoneType=32 ; }
+  else { _Type=32 ; }
   if ( _Yincr > 0 ) { SpinBox_Ybase->setValue(_Ycentre) ;
                       SpinBox_Yaxis->setValue(0.) ; }
-  else { _ZoneType=33 ; }
+  else { _Type=33 ; }
   if ( _Zincr > 0 ) { SpinBox_Zbase->setValue(_Zcentre) ;
                       SpinBox_Zaxis->setValue(1.) ; }
-  else { _ZoneType=31 ; }
+  else { _Type=31 ; }
   SpinBox_Radius->setValue(_Rayon) ;
   SpinBox_Haut->setValue(_Haut) ;
   MESSAGE("Fin de SetCylinder")
@@ -676,16 +681,16 @@ void MonCreateZone::SetPipe()
   gBCylindre->setVisible(0) ;
   gBPipe->setVisible(1) ;
   adjustSize() ;
-  _ZoneType=7;
+  _Type=7;
   if ( _Xincr > 0 ) { SpinBox_Xbase_p->setValue(_Xcentre) ;
                       SpinBox_Xaxis_p->setValue(0.) ; }
-  else { _ZoneType=62 ; }
+  else { _Type=62 ; }
   if ( _Yincr > 0 ) { SpinBox_Ybase_p->setValue(_Ycentre) ;
                       SpinBox_Yaxis_p->setValue(0.) ; }
-  else { _ZoneType=63 ; }
+  else { _Type=63 ; }
   if ( _Zincr > 0 ) { SpinBox_Zbase_p->setValue(_Zcentre) ;
                       SpinBox_Zaxis_p->setValue(1.) ; }
-  else { _ZoneType=61 ; }
+  else { _Type=61 ; }
   SpinBox_Radius_int->setValue(_RayonInt) ;
   SpinBox_Radius_ext->setValue(_Rayon) ;
   SpinBox_Haut_p->setValue(_Haut) ;
index e1705be111e219a1353e8cdc69788daf0be2e6e5..c0707756163f34f141def5ecd4051d7988f86a0a 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_CREATEZONE_H
 #define MON_CREATEZONE_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 
-#include <CreateZone.h>
+#include "ui_CreateZone.h"
 #include <QDialog>
 
 class MonCreateHypothesis;
-class MonCreateZone : public QDialog, public Ui_CreateZone
+class HOMARD_EXPORT MonCreateZone : public QDialog, public Ui_CreateZone
 {
     Q_OBJECT
 
@@ -48,11 +49,11 @@ protected :
 
     MonCreateHypothesis * _parent;
 
-    QString _aZoneName;
+    QString _Name;
     QString _aCaseName;
 
     int _Orient;
-    int _ZoneType;
+    int _Type;
     double _Xcentre, _Ycentre, _Zcentre, _Rayon ;
     double _ZoneXcentre, _ZoneYcentre, _ZoneZcentre, _ZoneRayon ;
     double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr ;
@@ -61,16 +62,15 @@ protected :
     double _ZoneXaxis, _ZoneYaxis, _ZoneZaxis, _ZoneRayonInt, _ZoneHaut ;
     double _DMax ;
 
-
     bool Chgt;
 
     HOMARD::HOMARD_Zone_var aZone ;
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
 
     virtual void InitConnect();
     virtual void InitValZone();
     virtual void InitMinMax();
-    virtual void SetNewZoneName();
+    virtual void SetNewName();
     virtual bool CreateOrUpdateZone();
 
 public slots:
index bf91e6021877b9f84a14760b1da549610ea9816a..23f7868c653e38e8aba9f7a3f99526d040152511 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditBoundaryAn.h"
 
 #include "SalomeApp_Tools.h"
 #include "HOMARDGUI_Utils.h"
 #include <utilities.h>
 
+using namespace std;
 
 // ------------------------------------------------------------------------
 MonEditBoundaryAn::MonEditBoundaryAn( MonCreateCase* parent, bool modal,
                           HOMARD::HOMARD_Gen_var myHomardGen,
-                          QString caseName, QString zoneName ):
+                          QString caseName, QString Name ):
 // ------------------------------------------------------------------------
 /* Constructs a MonEditBoundaryAn
     herite de MonCreateBoundaryAn
 */
     MonCreateBoundaryAn(parent, myHomardGen, caseName)
 {
-    MESSAGE("Debut de MonEditBoundaryAn pour " << zoneName.toStdString().c_str());
+    MESSAGE("Debut de MonEditBoundaryAn pour " << Name.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_BOUN_A_EDIT_WINDOW_TITLE"));
-    _aBoundaryAnName=zoneName;
-    aBoundaryAn = _myHomardGen->GetBoundary(_aBoundaryAnName.toStdString().c_str());
+    _aName=Name;
+    aBoundaryAn = myHomardGen->GetBoundary(_aName.toStdString().c_str());
     InitValEdit();
 }
 // ------------------------------------------------------------------------
@@ -52,13 +51,13 @@ MonEditBoundaryAn::~MonEditBoundaryAn()
 void MonEditBoundaryAn::InitValEdit()
 // ------------------------------------------------------------------------
 {
-  LEBoundaryName->setText(_aBoundaryAnName);
-  LEBoundaryName->setReadOnly(true);
-  _BoundaryType = aBoundaryAn->GetBoundaryType();
-  MESSAGE("_BoundaryType : "<<_BoundaryType);
+  LEName->setText(_aName);
+  LEName->setReadOnly(true);
+  _Type = aBoundaryAn->GetType();
+  MESSAGE("_Type : "<<_Type);
   InitValBoundaryAnLimit();
   if (_aCaseName != QString("")) InitValBoundaryAn();
-  switch (_BoundaryType)
+  switch (_Type)
   {
     case 1 : // il s agit d un cylindre
     {
@@ -72,6 +71,24 @@ void MonEditBoundaryAn::InitValEdit()
       SetSphere();
       break;
     }
+    case 3: // il s agit d un cone defini par un axe et un angle
+    {
+      InitValBoundaryAnConeA();
+      SetConeA();
+      break;
+    }
+    case 4: // il s agit d un cone defini par les 2 rayons
+    {
+      InitValBoundaryAnConeR();
+      SetConeR();
+      break;
+    }
+    case 5: // il s agit d un tore
+    {
+      InitValBoundaryAnTore();
+      SetTore();
+      break;
+    }
   };
 }
 // ------------------------------------------------------------------------
@@ -110,16 +127,64 @@ void MonEditBoundaryAn::InitValBoundaryAnSphere()
   _BoundaryAnRayon=mesCoordBoundary[3];
 }
 // ------------------------------------------------------------------------
+void MonEditBoundaryAn::InitValBoundaryAnConeA()
+// ------------------------------------------------------------------------
+{
+  HOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 7 );
+  _BoundaryAnXaxisCone=mesCoordBoundary[0];
+  _BoundaryAnYaxisCone=mesCoordBoundary[1];
+  _BoundaryAnZaxisCone=mesCoordBoundary[2];
+  _BoundaryAngle=mesCoordBoundary[3];
+  _BoundaryAnXorigCone=mesCoordBoundary[4];
+  _BoundaryAnYorigCone=mesCoordBoundary[5];
+  _BoundaryAnZorigCone=mesCoordBoundary[6];
+  convertRayonAngle(-1) ;
+}
+// ------------------------------------------------------------------------
+void MonEditBoundaryAn::InitValBoundaryAnConeR()
+// ------------------------------------------------------------------------
+{
+  HOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 8 );
+  _BoundaryAnXcone1=mesCoordBoundary[0];
+  _BoundaryAnYcone1=mesCoordBoundary[1];
+  _BoundaryAnZcone1=mesCoordBoundary[2];
+  _BoundaryAnRayon1=mesCoordBoundary[3];
+  _BoundaryAnXcone2=mesCoordBoundary[4];
+  _BoundaryAnYcone2=mesCoordBoundary[5];
+  _BoundaryAnZcone2=mesCoordBoundary[6];
+  _BoundaryAnRayon2=mesCoordBoundary[7];
+  convertRayonAngle(1) ;
+}
+// ------------------------------------------------------------------------
+void MonEditBoundaryAn::InitValBoundaryAnTore()
+// ------------------------------------------------------------------------
+{
+  HOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 8 );
+  _BoundaryAnXcentre=mesCoordBoundary[0];
+  _BoundaryAnYcentre=mesCoordBoundary[1];
+  _BoundaryAnZcentre=mesCoordBoundary[2];
+  _BoundaryAnXaxis=mesCoordBoundary[3];
+  _BoundaryAnYaxis=mesCoordBoundary[4];
+  _BoundaryAnZaxis=mesCoordBoundary[5];
+  _BoundaryAnRayon1=mesCoordBoundary[6];
+  _BoundaryAnRayon2=mesCoordBoundary[7];
+}
+// ------------------------------------------------------------------------
 void MonEditBoundaryAn::SetCylinder()
 // ------------------------------------------------------------------------
 {
   gBCylindre->setVisible(1);
   gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
   RBCylindre->setChecked(1);
-  adjustSize();
-  _BoundaryType=1;
+  _Type=1;
   RBSphere->setDisabled(true);
-  adjustSize();
+  RBCone->setDisabled(true);
+  RBTore->setDisabled(true);
 
   SpinBox_Xcent->setValue(_BoundaryAnXcentre);
   SpinBox_Ycent->setValue(_BoundaryAnYcentre);
@@ -139,7 +204,8 @@ void MonEditBoundaryAn::SetCylinder()
 // Rayon
   SpinBox_Radius->setValue(_BoundaryAnRayon);
   SpinBox_Radius->setSingleStep(_BoundaryAnRayon/10.);
-
+//
+  adjustSize();
 }
 // ------------------------------------------------------------------------
 void MonEditBoundaryAn::SetSphere()
@@ -148,9 +214,12 @@ void MonEditBoundaryAn::SetSphere()
   gBCylindre->setVisible(0);
   gBSphere->setVisible(1);
   RBSphere->setChecked(1);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
   RBCylindre->setDisabled(true);
-  adjustSize();
-  _BoundaryType=2 ;
+  RBCone->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=2 ;
 
   SpinBox_Xcentre->setValue(_BoundaryAnXcentre);
   if ( _Xincr > 0) { SpinBox_Xcentre->setSingleStep(_Xincr); }
@@ -164,15 +233,134 @@ void MonEditBoundaryAn::SetSphere()
   if ( _Zincr > 0) { SpinBox_Zcentre->setSingleStep(_Zincr); }
   else             { SpinBox_Zcentre->setSingleStep(1);}
 
-  SpinBox_Rayon->setMinimum(0.);
   SpinBox_Rayon->setValue(_BoundaryAnRayon);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void MonEditBoundaryAn::SetConeA()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  RBCone->setChecked(1);
+  gBTore->setVisible(0);
+  RB_Def_angle->setChecked(1);
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=3;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0));
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_V1->setSingleStep(1.);
+  SpinBox_Cone_V1->setMaximum(90.);
+//
+  TLCone_V2->setVisible(0);
+  SpinBox_Cone_V2->setVisible(0);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void MonEditBoundaryAn::SetConeR()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  gBTore->setVisible(0);
+  RBCone->setChecked(1);
+  RB_Def_radius->setChecked(1);
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=4;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0));
+  SpinBox_Cone_V1->setSingleStep(_Rayon/10.);
+  SpinBox_Cone_V1->setMaximum(100000.*_DMax);
+  SpinBox_Cone_V1->setValue(_BoundaryAnRayon1);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
+//
+  TLCone_V2->setVisible(1);
+  SpinBox_Cone_V2->setVisible(1);
+  TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0));
+  SpinBox_Cone_V2->setValue(_BoundaryAnRayon2);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void MonEditBoundaryAn::SetTore()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(1);
+  RBTore->setChecked(1);
+  _Type=5;
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBCone->setDisabled(true);
+
+  SpinBoxToreXcent->setValue(_BoundaryAnXcentre);
+  SpinBoxToreYcent->setValue(_BoundaryAnYcentre);
+  SpinBoxToreZcent->setValue(_BoundaryAnZcentre);
+
+  SpinBoxToreXaxe->setValue(_BoundaryAnXaxis);
+  SpinBoxToreYaxe->setValue(_BoundaryAnYaxis);
+  SpinBoxToreZaxe->setValue(_BoundaryAnZaxis);
+
+
+  SpinBoxToreXaxe->setSingleStep(0.1);
+  SpinBoxToreXcent->setSingleStep(_Xincr);
+  SpinBoxToreYaxe->setSingleStep(0.1);
+  SpinBoxToreYcent->setSingleStep(_Yincr);
+  SpinBoxToreZaxe->setSingleStep(0.1);
+  SpinBoxToreZcent->setSingleStep(_Zincr);
+// Rayon de revolution
+  SpinBoxToreRRev->setValue(_BoundaryAnRayon1);
+  SpinBoxToreRRev->setSingleStep(_BoundaryAnRayon1/10.);
+// Rayon primaire
+  SpinBoxToreRPri->setValue(_BoundaryAnRayon2);
+  SpinBoxToreRPri->setSingleStep(_BoundaryAnRayon2/10.);
+//
+  adjustSize();
 }
 // ---------------------------------------------------
 bool MonEditBoundaryAn::CreateOrUpdateBoundaryAn()
 //----------------------------------------------------
 //  Mise a jour des attributs de la BoundaryAn
 {
-  switch (_BoundaryType)
+  switch (_Type)
   {
     case 1 : // il s agit d un cylindre
     {
@@ -184,8 +372,27 @@ bool MonEditBoundaryAn::CreateOrUpdateBoundaryAn()
       aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
       break;
     }
+    case 3 : // il s agit d un cone defini par un axe et un angle
+    {
+      aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_aName.toStdString().c_str()), \
+      _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
+      _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
+      break;
+    }
+    case 4 : // il s agit d un cone defini par les 2 rayons
+    {
+      aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_aName.toStdString().c_str()), \
+        _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
+        _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
+      break;
+    }
+    case 5 : // il s agit d un tore
+    {
+      aBoundaryAn->SetTorus(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon1, _BoundaryAnRayon2 );
+      break;
+    }
   }
-  if (Chgt) _myHomardGen->InvalideBoundary(_aBoundaryAnName.toStdString().c_str());
+  if (Chgt) myHomardGen->InvalideBoundary(_aName.toStdString().c_str());
   HOMARD_UTILS::updateObjBrowser();
   return true;
 }
index 7e027564f8a303120e1921a2865257d4603aeb81..c9ba4eac578b82a379b2a632adf09b839cbc9a4c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITBOUNDARYAN_H
 #define MON_EDITBOUNDARYAN_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateBoundaryAn.h>
 
-class MonEditBoundaryAn : public MonCreateBoundaryAn
+class HOMARD_EXPORT MonEditBoundaryAn : public MonCreateBoundaryAn
 {
     Q_OBJECT
 public:
     MonEditBoundaryAn( MonCreateCase* parent, bool modal,
                  HOMARD::HOMARD_Gen_var myHomardGen,
-                 QString caseName, QString zoneName);
+                 QString caseName, QString Name);
     virtual ~MonEditBoundaryAn();
 
 protected :
-    void SetCylinder();
-    void SetSphere();
     bool CreateOrUpdateBoundaryAn();
     void InitValEdit();
     void InitValBoundaryAnLimit();
+    void SetCylinder();
+    void SetSphere();
+    void SetConeR();
+    void SetConeA();
+    void SetTore();
     void InitValBoundaryAnCylindre();
     void InitValBoundaryAnSphere();
+    void InitValBoundaryAnConeR();
+    void InitValBoundaryAnConeA();
+    void InitValBoundaryAnTore();
 
 public slots:
 
index 66b453e9273b86b01aa84bb9b027b96df5cfbca3..40e38f69f1766de3ba7aaa06a373efe5d308ad49 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditBoundaryDi.h"
 #include "MonEditListGroup.h"
 
@@ -29,33 +27,34 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
 
 // -------------------------------------------------------------------------------------------------------------------------------------
 MonEditBoundaryDi::MonEditBoundaryDi( MonCreateCase* parent, bool modal,
                                       HOMARD::HOMARD_Gen_var myHomardGen,
-                                      QString caseName, QString BoundaryName):
+                                      QString caseName, QString Name):
 // -------------------------------------------------------------------------------------------------------------------------------------
 /* Constructs a MonEditBoundaryDi
     herite de MonCreateBoundaryDi
 */
-    MonCreateBoundaryDi(parent, modal, myHomardGen, caseName, BoundaryName)
+    MonCreateBoundaryDi(parent, modal, myHomardGen, caseName, Name)
 {
-    MESSAGE("Debut de Boundary pour " << BoundaryName.toStdString().c_str());
+    MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_BOUN_D_EDIT_WINDOW_TITLE"));
     try
     {
-     _aBoundary=_myHomardGen->GetBoundary(CORBA::string_dup(_aBoundaryName.toStdString().c_str()));
-     if (caseName==QString("")) { _aCaseName=_aBoundary->GetCaseCreation();}
+     aBoundary=myHomardGen->GetBoundary(CORBA::string_dup(_aName.toStdString().c_str()));
+     if (caseName==QString("")) { _aCaseName=aBoundary->GetCaseCreation();}
      InitValEdit();
     }
     catch( SALOME::SALOME_Exception& S_ex )
     {
       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
-                                QString(CORBA::string_dup(S_ex.details.text)) );
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
       return;
     }
 
-    HOMARD::ListGroupType_var maListe = _aBoundary->GetGroups();
+    HOMARD::ListGroupType_var maListe = aBoundary->GetGroups();
     for ( int i = 0; i < maListe->length(); i++ )
        _listeGroupesBoundary << QString(maListe[i]);
 
@@ -65,18 +64,18 @@ MonEditBoundaryDi::~MonEditBoundaryDi()
 // ------------------------------
 {
 }
-
 // ------------------------------
 void MonEditBoundaryDi::InitValEdit()
 // ------------------------------
 {
-      LEBoundaryName->setText(_aBoundaryName);
-      LEBoundaryName->setReadOnly(true);
+      LEName->setText(_aName);
+      LEName->setReadOnly(true);
 
-      QString aMeshFile = _aBoundary->GetMeshFile();
+      QString aMeshFile = aBoundary->GetMeshFile();
       LEFileName->setText(aMeshFile);
       LEFileName->setReadOnly(1);
       PushFichier->setVisible(0);
+//
       adjustSize();
 }
 // ------------------------------
@@ -96,10 +95,10 @@ void MonEditBoundaryDi::SetFiltrage()
                               QObject::tr("HOM_BOUN_CASE") );
     return;
   }
-  HOMARD::HOMARD_Cas_var monCas= _myHomardGen->GetCas(_aCaseName.toStdString().c_str());
+  HOMARD::HOMARD_Cas_var monCas= myHomardGen->GetCase(_aCaseName.toStdString().c_str());
   HOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
 
-  MonEditListGroup *aDlg = new MonEditListGroup(NULL,this,  TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),
+  MonEditListGroup *aDlg = new MonEditListGroup(NULL, this, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen),
                             _aCaseName, _listeGroupesBoundary) ;
   aDlg->show();
 }
index c9ce082631919e5bcbe92900187bde269dee9d6c..9d2f936b04f584602edf310ed74794d2d158c068 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITBOUNDARYDI_H
 #define MON_EDITBOUNDARYDI_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateBoundaryDi.h>
 
-class MonEditBoundaryDi : public MonCreateBoundaryDi
+class HOMARD_EXPORT MonEditBoundaryDi : public MonCreateBoundaryDi
 {
     Q_OBJECT
 public:
     MonEditBoundaryDi( MonCreateCase* parent, bool modal,
                        HOMARD::HOMARD_Gen_var myHomardGen,
-                       QString caseName, QString BoundaryName );
+                       QString caseName, QString Name );
     virtual ~MonEditBoundaryDi();
 
 protected :
index 0045f9be85f0e9bde916df175b69ad0940495aa1..2ad3ef4ec58dd6eb0b99b0ef42dad4fde5d565f3 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditCase.h"
 
 #include "SalomeApp_Tools.h"
@@ -26,21 +24,22 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
 
-// -------------------------------------------------------------
-MonEditCase::MonEditCase ( QWidget* parent, bool modal,
-                           HOMARD::HOMARD_Gen_var myHomardGen,
-                           QString CaseName ):
 // -------------------------------------------------------------
 /* Constructs a MonEditCase
     herite de MonCreateCase
 */
-   MonCreateCase(parent, modal, myHomardGen)
+// -------------------------------------------------------------
+MonEditCase::MonEditCase ( bool modal,
+                           HOMARD::HOMARD_Gen_var myHomardGen,
+                           QString CaseName ):
+   MonCreateCase(modal, myHomardGen)
 {
     MESSAGE("Debut de MonEditCase" << CaseName.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_CASE_EDIT_WINDOW_TITLE"));
     _aCaseName = CaseName;
-    aCase = _myHomardGen->GetCas(_aCaseName.toStdString().c_str());
+    aCase = myHomardGen->GetCase(_aCaseName.toStdString().c_str());
     InitValEdit();
 }
 // ------------------------------
@@ -48,15 +47,13 @@ MonEditCase::~MonEditCase()
 // ------------------------------
 {
 }
-
-
 // ------------------------------
 void MonEditCase::InitValEdit()
 // ------------------------------
 {
   MESSAGE("InitValEdit");
-  LECaseName->setText(_aCaseName);
-  LECaseName->setReadOnly(true);
+  LEName->setText(_aCaseName);
+  LEName->setReadOnly(true);
 
   QString aDirName = aCase->GetDirName();
   LEDirName->setText(aDirName);
@@ -64,33 +61,18 @@ void MonEditCase::InitValEdit()
   PushDir->setVisible(0);
 
   QString _aitername=aCase->GetIter0Name();
-  HOMARD::HOMARD_Iteration_var aIter = _myHomardGen->GetIteration(_aitername.toStdString().c_str());
+  HOMARD::HOMARD_Iteration_var aIter = myHomardGen->GetIteration(_aitername.toStdString().c_str());
   QString aFileName = aIter->GetMeshFile();
   LEFileName->setText(aFileName);
   LEFileName->setReadOnly(true);
   PushFichier->setVisible(0);
 
   int ConfType=aCase->GetConfType();
-  if(ConfType==1)
-  {
-      GBTypeNoConf->setVisible(0);
-      RBConforme->setChecked(true);
-  }
-  else
-  {
-    RBNonConforme->setChecked(true);
-    GBTypeNoConf->setVisible(1);
-    RB1NpM->setEnabled(false);
-    RB1NpA->setEnabled(false);
-    RBQuelconque->setEnabled(false);
-  };
-
-  if (_ConfType==2) { RB1NpM->setChecked(true);};
-  if (_ConfType==3) { RB1NpA->setChecked(true);};
-  if (_ConfType==4) { RBQuelconque->setChecked(true);};
-
-  RBNonConforme->setEnabled(false);
+  if ( ( ConfType == 0 ) || ( ConfType == -1 ) ) { RBConforme->setChecked(true); }
+  else                                           { RBNonConforme->setChecked(true); };
   RBConforme->setEnabled(false);
+  RBNonConforme->setEnabled(false);
+  int ExtType=aCase->GetExtType();
 
 //    Non affichage du mode de suivi de frontiere
   CBBoundaryA->setVisible(0);
@@ -112,8 +94,8 @@ void MonEditCase::InitValEdit()
       NomFron = mesBoundarys[i++];
       MESSAGE("NomFron "<<NomFron.toStdString().c_str());
 //        L'objet associe pour en deduire le type
-      HOMARD::HOMARD_Boundary_var myBoundary = _myHomardGen->GetBoundary(NomFron.toStdString().c_str());
-      int type_obj = myBoundary->GetBoundaryType() ;
+      HOMARD::HOMARD_Boundary_var myBoundary = myHomardGen->GetBoundary(NomFron.toStdString().c_str());
+      int type_obj = myBoundary->GetType() ;
 //        C'est une frontiere discrete
 //        Rermarque : on ne gere pas les groupes
       if ( type_obj==0 )
@@ -150,7 +132,7 @@ void MonEditCase::InitValEdit()
         {
           ListeFron.append(NomFron);
           ok = ListeFron.size() ;
-          addBoundaryAn(NomFron);
+          AddBoundaryAn(NomFron);
         }
 //          on coche la case correspondant au couple (frontiere,groupe) en cours d'examen
         TWBoundary->item( 0, ok )->setCheckState( Qt::Checked );
@@ -167,7 +149,7 @@ void MonEditCase::InitValEdit()
       { for ( int j = 0; j < nbcol; j++ ) TWBoundary->item( i, j )->setFlags( Qt::ItemIsSelectable ); }
 //    on met un nom blanc au coin
       QTableWidgetItem *__colItem = new QTableWidgetItem();
-      __colItem->setText(QApplication::translate("CreateCase", "", 0, QApplication::UnicodeUTF8));
+      __colItem->setText(QApplication::translate("CreateCase", "", 0));
       TWBoundary->setHorizontalHeaderItem(0, __colItem);
 //    on cache les boutons inutiles
       PBBoundaryAnNew->setVisible(0);
@@ -185,15 +167,72 @@ void MonEditCase::InitValEdit()
   CBAdvanced->setEnabled(false) ;
   int Pyram = aCase->GetPyram();
   MESSAGE("Pyram "<<Pyram);
-  if ( Pyram > 0 )
+  if ( ( Pyram > 0 ) || ( ConfType < 0 ) || ( ConfType > 1 ) || ( ExtType > 0 ) )
   { GBAdvancedOptions->setVisible(1);
-    CBPyramid->setChecked(true);
+//
+    if ( Pyram > 0 )
+    { CBPyramid->setChecked(true);
+      CBPyramid->setVisible(1);
+    }
+    else
+    { CBPyramid->setChecked(false);
+      CBPyramid->setVisible(0);
+    }
     CBPyramid->setEnabled(false);
+//
+    if ( ( ConfType == 0 ) || ( ConfType == -1 ) )
+    { if ( ConfType == 0 ) { RBStandard->setChecked(true); }
+      else                 { RBBox->setChecked(true); }
+      RBStandard->setVisible(1);
+      RBBox->setVisible(1);
+      RBNC1NpA->setVisible(0);
+      RBNCQuelconque->setVisible(0);
+    }
+    else
+    { if (ConfType==-2) { RBBox->setChecked(true);};
+      if (ConfType==1) { RBStandard->setChecked(true);};
+      if (ConfType==2) { RBNC1NpA->setChecked(true);};
+      if (ConfType==3) { RBNCQuelconque->setChecked(true);};
+      RBStandard->setVisible(1);
+      RBBox->setVisible(1);
+      RBNC1NpA->setVisible(1);
+      RBNCQuelconque->setVisible(1);
+    }
+    RBStandard->setEnabled(false);
+    RBBox->setEnabled(false);
+    RBNC1NpA->setEnabled(false);
+    RBNCQuelconque->setEnabled(false);
+//
+    if ( ExtType == 0 )
+    { GBFormat->setVisible(0);
+      RBMED->setChecked(true);
+    }
+    else
+    { GBFormat->setVisible(1);
+      RBMED->setVisible(1);
+      RBSaturne->setVisible(1);
+      RBSaturne2D->setVisible(1);
+      if ( ExtType == 1 ) { RBSaturne->setChecked(true); }
+      else                { RBSaturne2D->setChecked(true); }
+    }
+    RBMED->setEnabled(false);
+    RBSaturne->setEnabled(false);
+    RBSaturne2D->setEnabled(false);
   }
   else
   { GBAdvancedOptions->setVisible(0);
     CBPyramid->setChecked(false);
- }
+    RBStandard->setChecked(true);
+    RBMED->setChecked(true);
+  }
+//
+// L'etat
+  int etat = aCase->GetState();
+  MESSAGE("etat "<<etat);
+  if ( etat == 0 ) { Comment->setText(QApplication::translate("CreateCase", "HOM_CASE_EDIT_STATE_0", 0)); }
+  else             { Comment->setText(QApplication::translate("CreateCase", "HOM_CASE_EDIT_STATE", 0)); }
+
+  Comment->setVisible(1);
 //
   adjustSize();
 }
index 60fcd2887ae7abe727d01318cf5e574062cb06d2..3bda896bb7d0923ad81aff8a8ae56d18ca56ba8a 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITCASE_H
 #define MON_EDITCASE_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateCase.h>
 
-class MonEditCase : public MonCreateCase
+class HOMARD_EXPORT MonEditCase : public MonCreateCase
 {
     Q_OBJECT
 public:
-    MonEditCase( QWidget* parent, bool modal,
+    MonEditCase( bool modal,
                  HOMARD::HOMARD_Gen_var myHomardGen,
-                 QString CaseName );
+                 QString Name );
     virtual ~MonEditCase();
 
 protected :
index d399466fb805af1ae3d72a3a9c82a66dd5062463..f4b598bde1ba413854a0a9aeaf0e58a287b94f53 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditFile.h"
 
 #include <QFile>
@@ -30,6 +28,8 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
+
 /* ---------------------------------------------------------
  * MonEditFile classe derivee de EditFile
  *               elle meme generee par uic
@@ -44,10 +44,12 @@ using namespace std;
  */
 MonEditFile::MonEditFile( QWidget* parent,  bool modal,
                           HOMARD::HOMARD_Gen_var myHomardGen,
-                          QString aFileName):
+                          QString aFileName, int option):
 //    QWidget(0),
     Ui_EditFile(),
-    _aFileName (aFileName)
+    _aFileName (aFileName),
+    _option (option),
+    _codret (0)
 {
   MESSAGE("Debut de MonEditFile " << aFileName.toStdString().c_str());
   setupUi(this);
@@ -82,19 +84,26 @@ void MonEditFile::EditText()
 // Lecture
 //    Remarque : il serait plus clair de tout lire d'un coup mais cela ne marche pas !
 //               alors on fait ligne par ligne et on cumule en ajoutant un saut de ligne.
-      QTextStream stream( &file );
-      QString tout;
-      while ( !stream.atEnd() )
-      {
-        tout = tout + stream.readLine() + "\n" ;
-      }
+    QTextStream stream( &file );
+    QString tout;
+    while ( !stream.atEnd() )
+    {
+      tout = tout + stream.readLine() + "\n" ;
+    }
 //       tout = stream.readAll() ;
-      QTBEditFile->setPlainText( tout );
+    QTBEditFile->setPlainText( tout );
   }
   else
   {
-     // GERALD -- QMESSAGE BOX
-     MESSAGE( "EditText " << _aFileName.toStdString().c_str() << "est impossible a ouvrir ");
+    // Option = 0 : emission d'un message d'erreur
+    if ( _option == 0 )
+    {
+      MESSAGE( "EditText " << _aFileName.toStdString().c_str() << " est impossible a ouvrir ");
+      QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
+                              QObject::tr("HOM_SELECT_FILE_3") );
+    }
+    // Sinon : rien
+    _codret = 1 ;
   }
 }
 // ------------------------------------------------------------------------
index d6e36501a3ef8f6131952fce36532d6f26a4b8d3..1c61d9744a3648f21f2c097e14a4538b259741b2 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_EDITFILE_H
 #define MON_EDITFILE_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include "SALOME_Selection.h"
 #include CORBA_CLIENT_HEADER(HOMARD_Gen)
 #include CORBA_CLIENT_HEADER(HOMARD_Cas)
 
-#include "EditFile.h"
+#include "ui_EditFile.h"
 #include <QWidget>
 
 class QListBox;
 class QDialog;
 
-class MonEditFile : public QWidget, public Ui_EditFile
+class HOMARD_EXPORT MonEditFile : public QWidget, public Ui_EditFile
 {
     Q_OBJECT
 
 public:
     MonEditFile( QWidget* parent,  bool modal,
                  HOMARD::HOMARD_Gen_var myHomardGen,
-                 QString FileName );
+                 QString FileName, int option );
     ~MonEditFile();
+    int _codret ;
 
 protected :
 
-    HOMARD::HOMARD_Gen_var _myHomardGen;
+    HOMARD::HOMARD_Gen_var myHomardGen;
     QString _aFileName ;
+    int _option ;
 
     virtual void InitConnect();
     virtual void EditText();
index 38a9d024931e0154629f0b71afc79f425c28d904..7522ea66a71d675d38a19111415b664534a43f8c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditHypothesis.h"
 #include "MonEditListGroup.h"
 
 #include "SalomeApp_Tools.h"
 #include "HOMARDGUI_Utils.h"
 #include "HomardQtCommun.h"
+#include "HOMARD.hxx"
 #include <utilities.h>
+
+using namespace std;
+
 // ----------------------------------------------------------------------------
 MonEditHypothesis::MonEditHypothesis( MonCreateIteration* parent, bool modal,
                                       HOMARD::HOMARD_Gen_var myHomardGen,
-                                      QString aHypothesisName,
+                                      QString Name,
                                       QString caseName,  QString aFieldFile ):
 // ----------------------------------------------------------------------------
 /* Constructs a MonEditHypothesis
     herite de MonCreateHypothesis
 */
-    MonCreateHypothesis(parent, modal,myHomardGen, aHypothesisName, caseName, aFieldFile)
+    MonCreateHypothesis(parent, modal,myHomardGen, Name, caseName, aFieldFile)
 {
-    MESSAGE("Hypothese " << aHypothesisName.toStdString().c_str());
+    MESSAGE("Hypothese " << Name.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_HYPO_EDIT_WINDOW_TITLE"));
-    _aHypothesis    = _myHomardGen->GetHypothesis(_aHypothesisName.toStdString().c_str());
-    if (caseName == QString("") ){ _aCaseName = _aHypothesis->GetCaseCreation();}
+    aHypothesis    = myHomardGen->GetHypothesis(_Name.toStdString().c_str());
+    if (caseName == QString("") ){ _aCaseName = aHypothesis->GetCaseCreation();}
     InitValEdit();
     InitGroupes();
 }
@@ -53,7 +55,7 @@ MonEditHypothesis::~MonEditHypothesis()
 void MonEditHypothesis::InitGroupes()
 // ------------------------------
 {
-    HOMARD::ListGroupType_var maListe = _aHypothesis->GetGroups();
+    HOMARD::ListGroupType_var maListe = aHypothesis->GetGroups();
     for ( int i = 0; i < maListe->length(); i++ )
        _aListeGroupes << QString(maListe[i]);
 
@@ -65,9 +67,9 @@ void MonEditHypothesis::InitValEdit()
 // ------------------------------
 {
   MESSAGE("Debut de InitValEdit");
-  LEHypothesisName->setText(_aHypothesisName);
-  LEHypothesisName->setReadOnly(true);
-  HOMARD::listeTypes_var ListTypes (_aHypothesis->GetAdapRefinUnRef());
+  LEName->setText(_Name);
+  LEName->setReadOnly(true);
+  HOMARD::listeTypes_var ListTypes (aHypothesis->GetAdapRefinUnRef());
   ASSERT( ListTypes->length()==3) ;
   _aTypeAdap = ListTypes[0];
   _aTypeRaff = ListTypes[1];
@@ -82,7 +84,7 @@ void MonEditHypothesis::InitValEdit()
 
   InitFieldInterp();
 
-  if (_aTypeAdap == 1 or _TypeFieldInterp >= 1 )
+  if (_aTypeAdap == 1 || _TypeFieldInterp >= 1 )
   {
     if (_aFieldFile == QString("")) { GBFieldFile->setVisible(0); }
     else
@@ -98,17 +100,18 @@ void MonEditHypothesis::InitValEdit()
   }
 // Les options avancees (non modifiables)
   CBAdvanced->setVisible(0) ;
-  int NivMax = _aHypothesis->GetNivMax();
-  double DiamMin = _aHypothesis->GetDiamMin();
-  int AdapInit = _aHypothesis->GetAdapInit();
-  if ( NivMax > 0 or DiamMin > 0 or AdapInit != 0 )
+  int NivMax = aHypothesis->GetNivMax();
+  double DiamMin = aHypothesis->GetDiamMin();
+  int AdapInit = aHypothesis->GetAdapInit();
+  int ExtraOutput = aHypothesis->GetExtraOutput();
+  if ( NivMax > 0 || DiamMin > 0 || AdapInit != 0 || ExtraOutput != 1 )
   { GBAdvancedOptions->setVisible(1);
     if ( NivMax > 0 )
-    { spinBoxNivMax->setValue(NivMax);
-      spinBoxNivMax->setDisabled(true); }
+    { SpinBoxNivMax->setValue(NivMax);
+      SpinBoxNivMax->setDisabled(true); }
     else
     { TLMaximalLevel->setVisible(0);
-      spinBoxNivMax->setVisible(0); }
+      SpinBoxNivMax->setVisible(0); }
     if ( DiamMin > 0 )
     { doubleSpinBoxDiamMin->setValue(DiamMin);
       doubleSpinBoxDiamMin->setDisabled(true); }
@@ -128,11 +131,40 @@ void MonEditHypothesis::InitValEdit()
     else
     { GBAdapInit->setVisible(0) ;
     }
+    if ( ExtraOutput % 2 == 0 )
+    {
+      CBOutputLevel->setChecked(true);
+      CBOutputLevel->setEnabled(false);
+    }
+    else { CBOutputLevel->setVisible(0) ; }
+    if ( ExtraOutput % 3 == 0 )
+    {
+      CBOutputQuality->setChecked(true);
+      CBOutputQuality->setEnabled(false);
+    }
+    else { CBOutputQuality->setVisible(0) ; }
+    if ( ExtraOutput % 5 == 0 )
+    {
+      CBOutputDiameter->setChecked(true);
+      CBOutputDiameter->setEnabled(false);
+    }
+    else { CBOutputDiameter->setVisible(0) ; }
+    if ( ExtraOutput % 7 == 0 )
+    {
+      CBOutputParent->setChecked(true);
+      CBOutputParent->setEnabled(false);
+    }
+    else { CBOutputParent->setVisible(0) ; }
+    if ( ExtraOutput % 11 == 0 )
+    {
+      CBOutputVoisins->setChecked(true);
+      CBOutputVoisins->setEnabled(false);
+    }
+    else { CBOutputVoisins->setVisible(0) ; }
   }
   else
   { GBAdvancedOptions->setVisible(0); }
 //
-  adjustSize();
 }
 // ----------------------------------------
 void MonEditHypothesis::InitAdaptUniforme()
@@ -140,28 +172,29 @@ void MonEditHypothesis::InitAdaptUniforme()
 // Affichage des informations pour une adaptation uniforme
 {
 //  Choix des options generales
-    GBFieldManagement->setVisible(0);
-    GBAreaManagement->setVisible(0);
-    GBUniform->setVisible(1);
-    adjustSize();
-    RBUniforme->setChecked(true);
-    RBUniforme->setEnabled(false);
-    RBChamp->setEnabled(false);
-    RBZone->setEnabled(false);
+  GBFieldManagement->setVisible(0);
+  GBAreaManagement->setVisible(0);
+  GBUniform->setVisible(1);
+  RBUniforme->setChecked(true);
+  RBUniforme->setEnabled(false);
+  RBChamp->setEnabled(false);
+  RBZone->setEnabled(false);
 //
 // Raffinement ou deraffinement ?
-    if (_aTypeDera == 0)
-    {
-        ASSERT(_aTypeRaff==1);
-        RBUniDera->setChecked(false);
-        RBUniRaff->setChecked(true);
-    }
-    if (_aTypeDera == 1)
-    {
-        ASSERT(_aTypeRaff==0);
-        RBUniDera->setChecked(true);
-        RBUniRaff->setChecked(false);
-    }
+  if (_aTypeDera == 0)
+  {
+      VERIFICATION(_aTypeRaff==1);
+      RBUniDera->setChecked(false);
+      RBUniRaff->setChecked(true);
+  }
+  if (_aTypeDera == 1)
+  {
+      VERIFICATION(_aTypeRaff==0);
+      RBUniDera->setChecked(true);
+      RBUniRaff->setChecked(false);
+  }
+//
+  adjustSize();
 //
 }
 // -------------------------------------
@@ -169,52 +202,53 @@ void MonEditHypothesis::InitAdaptZone()
 // -------------------------------------
 // Affichage des informations pour une adaptation selon des zones :
 {
-    MESSAGE ("Debut de InitAdaptZone");
+  MESSAGE ("Debut de InitAdaptZone");
 //  Choix des options generales
-    GBUniform->setVisible(0);
-    GBFieldManagement->setVisible(0);
-    GBAreaManagement->setVisible(1);
-    adjustSize();
-    RBZone->setChecked(true);
-    RBChamp->setEnabled(false);
-    RBUniforme->setEnabled(false);
-    RBZone->setEnabled(false);
+  GBUniform->setVisible(0);
+  GBFieldManagement->setVisible(0);
+  GBAreaManagement->setVisible(1);
+  RBZone->setChecked(true);
+  RBChamp->setEnabled(false);
+  RBUniforme->setEnabled(false);
+  RBZone->setEnabled(false);
 
 //  Recuperation de toutes les zones decrites et notation de celles retenues
-    GetAllZones();
-    HOMARD::listeZonesHypo_var mesZonesAvant = _aHypothesis->GetZones();
-    for (int i=0; i<mesZonesAvant->length(); i++)
-    {
+  GetAllZones();
+  HOMARD::listeZonesHypo_var mesZonesAvant = aHypothesis->GetZones();
+  for (int i=0; i<mesZonesAvant->length(); i++)
+  {
     MESSAGE ("i"<<i<<", zone :"<<string(mesZonesAvant[i])<<", type :"<<string(mesZonesAvant[i+1]));
-      for ( int j =0 ; j < TWZone->rowCount(); j++)
+    for ( int j =0 ; j < TWZone->rowCount(); j++)
+    {
+      MESSAGE (". j"<<j<<", zone :"<<TWZone->item(j,2)->text().toStdString());
+      if ( TWZone->item(j,2)->text().toStdString() == string(mesZonesAvant[i]) )
       {
-    MESSAGE (". j"<<j<<", zone :"<<TWZone->item(j,2)->text().toStdString());
-        if ( TWZone->item(j,2)->text().toStdString() == string(mesZonesAvant[i]) )
+        MESSAGE ("OK avec "<<string(mesZonesAvant[i]));
+        if ( string(mesZonesAvant[i+1]) == "1" )
+        {
+          MESSAGE ("... RAFF");
+          TWZone->item( j,0 )->setCheckState( Qt::Checked );
+          TWZone->item( j,1 )->setCheckState( Qt::Unchecked ); }
+        else
         {
-    MESSAGE ("OK avec "<<string(mesZonesAvant[i]));
-          if ( string(mesZonesAvant[i+1]) == "1" )
-          {
-    MESSAGE ("... RAFF");
-            TWZone->item( j,0 )->setCheckState( Qt::Checked );
-            TWZone->item( j,1 )->setCheckState( Qt::Unchecked ); }
-          else
-          {
-    MESSAGE ("... DERA");
-            TWZone->item( j,0 )->setCheckState( Qt::Unchecked );
-            TWZone->item( j,1 )->setCheckState( Qt::Checked ); }
-          break;
-        }
+          MESSAGE ("... DERA");
+          TWZone->item( j,0 )->setCheckState( Qt::Unchecked );
+          TWZone->item( j,1 )->setCheckState( Qt::Checked ); }
+        break;
       }
-      i += 1 ;
     }
+    i += 1 ;
+  }
 //
 //  Inactivation des choix
-    for ( int j =0 ; j < TWZone->rowCount(); j++)
-    {
-      TWZone->item( j, 0 )->setFlags(0);
-      TWZone->item( j, 1 )->setFlags(0);
-    }
-    PBZoneNew->setVisible(0);
+  for ( int j =0 ; j < TWZone->rowCount(); j++)
+  {
+    TWZone->item( j, 0 )->setFlags(0);
+    TWZone->item( j, 1 )->setFlags(0);
+  }
+  PBZoneNew->setVisible(0);
+//
+  adjustSize();
 //
 }
 // -------------------------------------
@@ -231,15 +265,12 @@ void MonEditHypothesis::InitAdaptChamps()
     GBUniform->setVisible(0);
     GBAreaManagement->setVisible(0);
     GBFieldManagement->setVisible(1);
-    adjustSize();
     RBChamp->setChecked(true);
     RBUniforme->setEnabled(false);
     RBChamp->setEnabled(false);
     RBZone->setEnabled(false);
 
-
-
-    HOMARD::InfosHypo_var  aInfosHypo = _aHypothesis->GetField();
+    HOMARD::InfosHypo_var  aInfosHypo = aHypothesis->GetField();
     _aFieldName =  aInfosHypo->FieldName;
     _TypeThR = aInfosHypo->TypeThR;
     _ThreshR = aInfosHypo->ThreshR;
@@ -248,13 +279,12 @@ void MonEditHypothesis::InitAdaptChamps()
     _UsField = aInfosHypo->UsField;
     _UsCmpI  = aInfosHypo->UsCmpI;
 
-
     CBFieldName->insertItem(0,_aFieldName);
     CBFieldName->setCurrentIndex(0);
     CBFieldName->setEnabled(false);
     //SetFieldName(Qt::Unchecked);
 
-    HOMARD::listeComposantsHypo_var mesComposantsAvant = _aHypothesis->GetListComp();
+    HOMARD::listeComposantsHypo_var mesComposantsAvant = aHypothesis->GetComps();
     TWCMP->clear();
     TWCMP->setRowCount(0);
     TWCMP->resizeRowsToContents();
@@ -276,6 +306,7 @@ void MonEditHypothesis::InitAdaptChamps()
   RBRAbs->setEnabled(false) ;
   RBRRel->setEnabled(false) ;
   RBRPE->setEnabled(false) ;
+  RBRMuSigma->setEnabled(false) ;
   RBRNo->setEnabled(false) ;
   if (_aTypeRaff== 0 )
   {
@@ -287,12 +318,14 @@ void MonEditHypothesis::InitAdaptChamps()
     if ( _TypeThR == 1 ) { SpinBox_RAbs->setValue(_ThreshR); SetRAbs(); RBRAbs->setEnabled(true);}
     if ( _TypeThR == 2 ) { SpinBox_RRel->setValue(_ThreshR); SetRRel(); RBRRel->setEnabled(true);}
     if ( _TypeThR == 3 ) { SpinBox_RPE->setValue(_ThreshR);  SetRPE();  RBRPE->setEnabled(true);}
+    if ( _TypeThR == 4 ) { SpinBox_RMuSigma->setValue(_ThreshR);  SetRMS();  RBRMuSigma->setEnabled(true);}
   }
 
   // Les seuils de deraffinement
   RBCAbs->setEnabled(false) ;
   RBCRel->setEnabled(false) ;
   RBCPE->setEnabled(false) ;
+  RBCMuSigma->setEnabled(false) ;
   RBCNo->setEnabled(false) ;
   if (_aTypeDera== 0 )
   {
@@ -304,6 +337,7 @@ void MonEditHypothesis::InitAdaptChamps()
     if ( _TypeThC == 1 ) { SpinBox_CAbs->setValue(_ThreshC); SetCAbs(); RBCAbs->setEnabled(true);}
     if ( _TypeThC == 2 ) { SpinBox_CRel->setValue(_ThreshC); SetCRel(); RBCRel->setEnabled(true);}
     if ( _TypeThC == 3 ) { SpinBox_CPE->setValue(_ThreshC);  SetCPE(); RBCPE->setEnabled(true);}
+    if ( _TypeThC == 4 ) { SpinBox_CMuSigma->setValue(_ThreshC);  SetCMS();  RBCMuSigma->setEnabled(true);}
   }
   // Le choix de la prise en compte des composantes
   if ( TWCMP->rowCount() == 1 )
@@ -332,6 +366,8 @@ void MonEditHypothesis::InitAdaptChamps()
     RBInf->setChecked(true);
     RBInf->setEnabled(true);
   }
+//
+  adjustSize();
 }
 // -------------------------------------
 void MonEditHypothesis::InitFieldInterp()
@@ -340,7 +376,7 @@ void MonEditHypothesis::InitFieldInterp()
 {
     MESSAGE ("Debut de InitFieldInterp");
 //  Choix des options generales
-    _TypeFieldInterp = _aHypothesis->GetTypeFieldInterp();
+    _TypeFieldInterp = aHypothesis->GetTypeFieldInterp();
     MESSAGE ("_TypeFieldInterp = " << _TypeFieldInterp);
 //
 //  Aucune interpolation
@@ -361,19 +397,20 @@ void MonEditHypothesis::InitFieldInterp()
       RBFieldChosen->setChecked(true);
 //
       TWField->setVisible(1);
-      HOMARD::listFieldInterpHypo_var mesChampsAvant = _aHypothesis->GetListFieldInterp();
+      HOMARD::listeFieldInterpsHypo_var mesChampsAvant = aHypothesis->GetFieldInterps();
       TWField->clear();
       TWField->setRowCount(0);
       TWField->resizeRowsToContents();
-      for (int i=0; i<mesChampsAvant->length(); i++)
+      for (int iaux=0; iaux<mesChampsAvant->length(); iaux++)
       {
         TWField->insertRow(0);
         TWField->setItem( 0, 0, new QTableWidgetItem( QString ("") ) );
         TWField->item( 0, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
         TWField->item( 0, 0 )->setCheckState(Qt::Checked );
         TWField->item( 0, 0 )->setFlags( 0 );
-        TWField->setItem( 0, 1, new QTableWidgetItem(QString(mesChampsAvant[i]).trimmed()));
+        TWField->setItem( 0, 1, new QTableWidgetItem(QString(mesChampsAvant[iaux]).trimmed()));
         TWField->item( 0, 1 )->setFlags( Qt::ItemIsEnabled |Qt::ItemIsSelectable );
+        iaux++;
       }
       TWField->resizeColumnsToContents();
       TWField->resizeRowsToContents();
@@ -396,17 +433,19 @@ bool MonEditHypothesis::PushOnApply()
       if (_TypeThR == 1) { _ThreshR = SpinBox_RAbs->value(); }
       if (_TypeThR == 2) { _ThreshR = SpinBox_RRel->value(); }
       if (_TypeThR == 3) { _ThreshR = SpinBox_RPE->value();  }
-      _aHypothesis->SetRefinThr(_TypeThR, _ThreshR) ;
+      if (_TypeThR == 4) { _ThreshR = SpinBox_RMuSigma->value();  }
+      aHypothesis->SetRefinThr(_TypeThR, _ThreshR) ;
     }
     if (_aTypeDera!= 0 )
     {
       if (_TypeThC == 1) { _ThreshC = SpinBox_CAbs->value() ; }
       if (_TypeThC == 2) { _ThreshC = SpinBox_CRel->value() ; }
       if (_TypeThC == 3) { _ThreshC = SpinBox_CPE->value() ; }
-      _aHypothesis->SetUnRefThr(_TypeThC, _ThreshC) ;
+      if (_TypeThC == 4) { _ThreshC = SpinBox_CMuSigma->value() ; }
+      aHypothesis->SetUnRefThr(_TypeThC, _ThreshC) ;
     }
 
-    _myHomardGen->InvalideHypo(_aHypothesisName.toStdString().c_str());
+    myHomardGen->InvalideHypo(_Name.toStdString().c_str());
     HOMARD_UTILS::updateObjBrowser();
   }
   return true;
@@ -417,7 +456,7 @@ void MonEditHypothesis::SetFiltrage()
 {
   if (CBGroupe->isChecked())
   {
-    MonEditListGroup *aDlg = new MonEditListGroup(this, NULL, TRUE, HOMARD::HOMARD_Gen::_duplicate(_myHomardGen),_aCaseName, _aListeGroupes) ;
+    MonEditListGroup *aDlg = new MonEditListGroup(this, NULL, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen),_aCaseName, _aListeGroupes) ;
     aDlg->show();
   }
 }
index ef9c11b30b34986b58c984b4a8882b69a2df5447..570fbd71a3eb652e632126d0869fa06b5a60090b 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITHYPOTHESIS_H
 #define MON_EDITHYPOTHESIS_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateHypothesis.h>
 
-class MonEditHypothesis : public MonCreateHypothesis
+class HOMARD_EXPORT MonEditHypothesis : public MonCreateHypothesis
 {
     Q_OBJECT
 public:
     MonEditHypothesis( MonCreateIteration* parent, bool modal,
                        HOMARD::HOMARD_Gen_var myHomardGen,
-                       QString caseName, QString HypothesisName, QString aFieldFile );
+                       QString caseName, QString Name, QString aFieldFile );
     virtual ~MonEditHypothesis();
 
 protected :
index a6368637a7a6db6b98091531a12c2a330a5193e6..8ed0a9dfcf0a498fb5a78636137a87fd67463c0e 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditIteration.h"
 
 #include "SalomeApp_Tools.h"
@@ -26,6 +24,7 @@ using namespace std;
 #include "HomardQtCommun.h"
 #include <utilities.h>
 
+using namespace std;
 
 // -------------------------------------------------------------------------------------------------------------------------------------
 MonEditIteration::MonEditIteration ( QWidget* parent, bool modal,
@@ -36,17 +35,17 @@ MonEditIteration::MonEditIteration ( QWidget* parent, bool modal,
     herite de MonCreateIteration
 */
    MonCreateIteration(parent, modal, myHomardGen, IterParentName),
-   _rank(0), _step(0), _IterationName(""), _FieldFile(""),_aTypeAdap()
+   _rank(-1), _step(-1), _IterationName(""), _FieldFile(""),_aTypeAdap()
 {
     MESSAGE("Debut de  MonEditIteration" << IterName.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_ITER_EDIT_WINDOW_TITLE"));
     _IterationName = IterName;
-    aIter = _myHomardGen->GetIteration(_IterationName.toStdString().c_str());
+    aIter = myHomardGen->GetIteration(_IterationName.toStdString().c_str());
 
 //  Attention au cas ou c'est une iteration initiale : il faut inhiber l'essentiel
-    int number = aIter->GetNumber() ;
-    if ( number == 0 ) { InitValEdit0(); }
-    else               { InitValEdit(); }
+    int etat = aIter->GetState() ;
+    if ( etat <= 0 ) { InitValEdit0(etat); }
+    else             { InitValEdit(); }
 }
 // ------------------------------
 MonEditIteration::~MonEditIteration()
@@ -55,13 +54,13 @@ MonEditIteration::~MonEditIteration()
 }
 
 // ------------------------------
-void MonEditIteration::InitValEdit0()
+void MonEditIteration::InitValEdit0(int etat)
 // ------------------------------
-//    Cas d'une iteration 0
+//    Cas d'une iteration initiale d'un cas (initial ou poursuite)
 {
 //
-      LEIterationName->setText(_IterationName);
-      LEIterationName->setReadOnly(true);
+      LEName->setText(_IterationName);
+      LEName->setReadOnly(true);
 
 //    Invisibilite de l'iteration parent
       Iter_Parent->setVisible(0);
@@ -75,88 +74,89 @@ void MonEditIteration::InitValEdit0()
       LEMeshName_n->setReadOnly(1);
 
 //    Message general
-      Mesh_np1->setText(QObject::tr("HOM_ITER_STARTING_POINT_1"));
+      if ( etat == 0 ) { Mesh_np1->setText(QObject::tr("HOM_ITER_STARTING_POINT_1")) ; }
+      else             { Mesh_np1->setText(QObject::tr("HOM_ITER_STARTING_POINT_2")) ; }
       LEMeshName_np1->setVisible(0);
 //
 //    Invisibilite des hypotheses et des champs
       Hypothese->setVisible(0);
       GBField->setVisible(0);
-      adjustSize();
 //
 }
 // ------------------------------
 void MonEditIteration::InitValEdit()
 // ------------------------------
-//    Cas d'une iteration > 0
+//    Cas d'une iteration courante
 {
 //    Affichage bloque du nom de l'iteration
-      LEIterationName->setText(_IterationName);
-      LEIterationName->setReadOnly(true);
-
-//    Affichage bloque du nom de l'iteration parent
-      _IterParentName = aIter->GetIterParent();
-      LEIterationParentName->setText(_IterParentName);
-      LEIterationParentName->setReadOnly(true);
-      PBIterParent->setEnabled(false);
-      PBIterParent->setVisible(0);
+  LEName->setText(_IterationName);
+  LEName->setReadOnly(true);
+
+  //    Affichage bloque du nom de l'iteration parent
+  _IterParentName = aIter->GetIterParentName();
+  LEIterationParentName->setText(_IterParentName);
+  LEIterationParentName->setReadOnly(true);
+  PBIterParent->setEnabled(false);
+  PBIterParent->setVisible(0);
+
+  //    Affichage bloque du nom du maillage de l'iteration parent
+  aIterParent = myHomardGen->GetIteration(_IterParentName.toStdString().c_str());
+  QString MeshNameParent = aIterParent->GetMeshName();
+  LEMeshName_n->setText(MeshNameParent);
+  LEMeshName_n->setReadOnly(1);
+
+  //    Affichage bloque du nom du maillage de l'iteration courante
+  QString MeshName = aIter->GetMeshName();
+  LEMeshName_np1->setText(MeshName);
+  LEMeshName_np1->setReadOnly(1);
+
+  //    Affichage de la bonne hypothese
+  QString HypoName = aIter->GetHypoName();
+  CBHypothese->insertItem(0,HypoName);
+  CBHypothese->setCurrentIndex(0);
+  CBHypothese->setEnabled(false);
+  PBHypoNew->setVisible(0);
+
+  //    Pour une adaptation selon un champ
+  HOMARD::HOMARD_Hypothesis_var myHypo = myHomardGen->GetHypothesis(HypoName.toStdString().c_str()) ;
+  _aTypeAdap = myHypo->GetAdapType() ;
+  if ( _aTypeAdap == 1 )
+  {
+    _FieldFile = aIter->GetFieldFile();
+    LEFieldFile->setText(_FieldFile);
+    _step = aIter->GetTimeStep() ;
+    SpinBox_TimeStep->setValue(_step);
+    _rank = aIter->GetRank() ;
+    SpinBox_Rank->setValue(_rank);
+
+  // Cas ou on prend le dernier pas de temps ou sans pas de temps
+    if ( _step <= -1 )
+    {
+      Rank->setVisible(0);
+      SpinBox_Rank->setVisible(0);
+      TimeStep->setVisible(0);
+      SpinBox_TimeStep->setVisible(0);
 
-//    Affichage bloque du nom du maillage de l'iteration parent
-      aIterParent = _myHomardGen->GetIteration(_IterParentName.toStdString().c_str());
-      QString MeshNameParent = aIterParent->GetMeshName();
-      LEMeshName_n->setText(MeshNameParent);
-      LEMeshName_n->setReadOnly(1);
+      if ( _step == -2 ) { RBLast->setChecked(true); }
+      else               { RBNo->setChecked(true); }
+    }
 
-//    Affichage bloque du nom du maillage de l'iteration courante
-      QString MeshName = aIter->GetMeshName();
-      LEMeshName_np1->setText(MeshName);
-      LEMeshName_np1->setReadOnly(1);
-
-//    Affichage de la bonne hypothese
-      QString HypoName = aIter->GetHypoName();
-      CBHypothese->insertItem(0,HypoName);
-      CBHypothese->setCurrentIndex(0);
-      CBHypothese->setEnabled(false);
-      PBHypoNew->setVisible(0);
-
-//    Pour une adaptation selon un champ
-      HOMARD::HOMARD_Hypothesis_var myHypo = _myHomardGen->GetHypothesis(HypoName.toStdString().c_str()) ;
-      _aTypeAdap = myHypo->GetAdapType() ;
-      if ( _aTypeAdap == 1 )
-      {
-          _FieldFile = aIter->GetFieldFile();
-          LEFieldFile->setText(_FieldFile);
-          _step = aIter->GetTimeStep() ;
-          SpinBox_TimeStep->setValue(_step);
-          _rank = aIter->GetRank() ;
-          SpinBox_Rank->setValue(_rank);
-
-// Cas ou on prend le dernier pas de temps ou sans pas de temps
-          if ( _step <= -1 )
-          {
-            Rank->setVisible(0);
-            SpinBox_Rank->setVisible(0);
-            TimeStep->setVisible(0);
-            SpinBox_TimeStep->setVisible(0);
-
-            if ( _step == -2 ) { RBLast->setChecked(true); }
-            else               { RBNo->setChecked(true); }
-          }
-
-// Cas avec pas de temps
-          else
-          {
-            Rank->setVisible(1);
-            SpinBox_Rank->setVisible(1);
-            TimeStep->setVisible(1);
-            SpinBox_TimeStep->setVisible(1);
-            RBChosen->setChecked(true);
-          }
-      }
-      else
-      {
-          GBField->setVisible(0);
-      }
-      adjustSize();
+  // Cas avec pas de temps
+    else
+    {
+      Rank->setVisible(1);
+      SpinBox_Rank->setVisible(1);
+      TimeStep->setVisible(1);
+      SpinBox_TimeStep->setVisible(1);
+      RBChosen->setChecked(true);
+    }
+  }
+  else
+  {
+    GBField->setVisible(0);
+  }
+//
+  adjustSize();
 //
 }
 
@@ -167,16 +167,17 @@ bool MonEditIteration::PushOnApply()
   if ( _aTypeAdap ==  1)
   {
 // Pour du raffinement selon un champ, les instants ont-ils change ?
-    if ( (_FieldFile != LEFieldFile->text().trimmed()) or
-       (  _rank != SpinBox_Rank->value())  or
+    if ( (_FieldFile != LEFieldFile->text().trimmed()) ||
+       (  _rank != SpinBox_Rank->value())  ||
        (  _step != SpinBox_TimeStep->value()))
     {
       _FieldFile = LEFieldFile->text().trimmed();
+      aIter->SetFieldFile(CORBA::string_dup(_FieldFile.toStdString().c_str()));
       _rank = SpinBox_Rank->value();
       _step = SpinBox_TimeStep->value();
-      aIter->SetFieldFile(CORBA::string_dup(_FieldFile.toStdString().c_str()));
-      aIter->SetTimeStepRank(_step, _rank);
-      _myHomardGen->InvalideIter(_IterationName.toStdString().c_str());
+      if ( _step == -2 ) { aIter->SetTimeStepRankLast(); }
+      else               { aIter->SetTimeStepRank(_step, _rank); }
+      myHomardGen->InvalideIter(_IterationName.toStdString().c_str());
       HOMARD_UTILS::updateObjBrowser();
     }
   }
index f224fa840c09b854a46c64ad2cf29d69a2505f9b..4cbc0ec22e91f89feb5584c906fccb5866fec19d 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITITERATION_H
 #define MON_EDITITERATION_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateIteration.h>
 
-class MonEditIteration : public MonCreateIteration
+class HOMARD_EXPORT MonEditIteration : public MonCreateIteration
 {
     Q_OBJECT
 public:
     MonEditIteration( QWidget* parent, bool modal,
                       HOMARD::HOMARD_Gen_var myHomardGen,
-                      QString IterParentName, QString IterName );
+                      QString IterParentName, QString Name );
     virtual ~MonEditIteration();
 
 protected :
@@ -45,7 +47,7 @@ protected :
     int _step ;
 
     virtual void InitValEdit();
-    virtual void InitValEdit0();
+    virtual void InitValEdit0(int etat);
     virtual bool PushOnApply();
 
 public slots:
index 691c0aa5a557254eaf7fde50920ba6831ddd325e..5eec7893fbcd700009c3c870cb8ef5ff062f2be8 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditListGroup.h"
 #include <utilities.h>
 
+using namespace std;
 //---------------------------------------------------------------------
 MonEditListGroup::MonEditListGroup( MonCreateHypothesis* parentHyp,
                                     MonCreateBoundaryDi* parentBound,
index 526169759cd88fa27a4111ff7171824150e801c0..d6db58124de229e33c2571da9f54627b0bed8376 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,7 @@
 #ifndef MON_EDITLISTGROUP_H
 #define MON_EDITLISTGROUP_H
 
+#include "HOMARDGUI_Exports.hxx"
 
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
@@ -31,7 +32,7 @@
 
 class MonCreateHypothesis;
 class MonCreateBoundaryDi;
-class MonEditListGroup : public MonCreateListGroup
+class HOMARD_EXPORT MonEditListGroup : public MonCreateListGroup
 {
     Q_OBJECT
 
diff --git a/src/HOMARDGUI/MonEditYACS.cxx b/src/HOMARDGUI/MonEditYACS.cxx
new file mode 100644 (file)
index 0000000..1e5a08a
--- /dev/null
@@ -0,0 +1,148 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MonEditYACS.h"
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include <utilities.h>
+
+using namespace std;
+
+// -------------------------------------------------------------
+/* Constructs a MonEditYACS
+    herite de MonCreateYACS
+*/
+// -------------------------------------------------------------
+MonEditYACS::MonEditYACS ( bool modal,
+                           HOMARD::HOMARD_Gen_var myHomardGen,
+                           QString Name ):
+   MonCreateYACS(myHomardGen, Name)
+{
+    MESSAGE("Debut de MonEditYACS" << Name.toStdString().c_str());
+    setWindowTitle(QObject::tr("HOM_YACS_EDIT_WINDOW_TITLE"));
+    _Name = Name;
+    aYACS = myHomardGen->GetYACS(_Name.toStdString().c_str());
+    InitValEdit();
+}
+// ------------------------------
+MonEditYACS::~MonEditYACS()
+// ------------------------------
+{
+}
+// ------------------------------
+void MonEditYACS::InitValEdit()
+// ------------------------------
+{
+  MESSAGE("InitValEdit");
+  LEName->setText(_Name);
+  LEName->setReadOnly(true);
+
+  _aCaseName = aYACS->GetCaseName();
+  LECaseName->setText(_aCaseName);
+  LECaseName->setReadOnly(true);
+  PBCaseName->setVisible(0);
+
+  _aScriptFile = aYACS->GetScriptFile();
+  LEScriptFile->setText(_aScriptFile);
+
+  _aDirName = aYACS->GetDirName();
+  LEDirName->setText(_aDirName);
+  LEDirName->setReadOnly(true);
+
+  _aMeshFile = aYACS->GetMeshFile();
+  LEMeshFile->setText(_aMeshFile);
+
+  _Type=aYACS->GetType();
+  if(_Type==1) { RBConstant->setChecked(true); }
+  else         { RBVariable->setChecked(true); };
+  RBConstant->setEnabled(false);
+  RBVariable->setEnabled(false);
+
+  _MaxIter = aYACS->GetMaxIter();
+  SpinBoxMaxIter->setValue(_MaxIter) ;
+  _MaxNode = aYACS->GetMaxNode();
+  SpinBoxMaxNode->setValue(_MaxNode) ;
+  _MaxElem = aYACS->GetMaxElem();
+  SpinBoxMaxElem->setValue(_MaxElem) ;
+//
+}
+
+// ---------------------------------------------------
+bool MonEditYACS:: CreateOrUpdate()
+//----------------------------------------------------
+//  Edition/modification du schema
+{
+  MESSAGE("CreateOrUpdate");
+  bool chgt = false ;
+  int valeur_i ;
+  // A. Recuperation et comparaison des valeurs
+  // A.1. Le script de lancement
+  QString aScriptFile=LEScriptFile->text().trimmed();
+  if ( aScriptFile != _aScriptFile )
+  {
+//     MESSAGE("modification de ScriptFile : "<<_aScriptFile.toStdString()<<" devient "<<aScriptFile.toStdString());
+    _aScriptFile = aScriptFile ;
+    aYACS->SetScriptFile(CORBA::string_dup(_aScriptFile.toStdString().c_str())) ;
+    chgt = true ;
+  }
+  // A.2. Le maillage initial
+  QString aMeshFile=LEMeshFile->text().trimmed();
+  if ( aMeshFile != _aMeshFile )
+  {
+//     MESSAGE("modification de aMeshFile : "<<_aMeshFile.toStdString()<<" devient "<<aMeshFile.toStdString());
+    _aMeshFile = aMeshFile ;
+    aYACS->SetMeshFile(CORBA::string_dup(_aMeshFile.toStdString().c_str())) ;
+    chgt = true ;
+  }
+  // A.3. La convergence
+  valeur_i = SpinBoxMaxIter->value() ;
+  if ( valeur_i != _MaxIter )
+  {
+//     MESSAGE("modification de MaxIter : "<<_MaxIter<<" devient "<<valeur_i);
+    _MaxIter = valeur_i ;
+    aYACS->SetMaxIter(_MaxIter) ;
+    chgt = true ;
+  }
+  valeur_i = SpinBoxMaxNode->value() ;
+  if ( valeur_i != _MaxNode )
+  {
+//     MESSAGE("modification de MaxNode : "<<_MaxNode<<" devient "<<valeur_i);
+    _MaxNode = valeur_i ;
+    aYACS->SetMaxNode(_MaxNode) ;
+    chgt = true ;
+  }
+  valeur_i = SpinBoxMaxElem->value() ;
+  if ( valeur_i != _MaxElem )
+  {
+//     MESSAGE("modification de MaxElem : "<<_MaxElem<<" devient "<<valeur_i);
+    _MaxElem = valeur_i ;
+    aYACS->SetMaxElem(_MaxElem) ;
+    chgt = true ;
+  }
+// B. Si changement
+  if ( chgt )
+  {
+    myHomardGen->InvalideYACS(_Name.toStdString().c_str());
+  }
+
+  HOMARD_UTILS::updateObjBrowser();
+  return true ;
+}
diff --git a/src/HOMARDGUI/MonEditYACS.h b/src/HOMARDGUI/MonEditYACS.h
new file mode 100644 (file)
index 0000000..2402dd0
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MON_EDITYACS_H
+#define MON_EDITYACS_H
+
+#include "HOMARDGUI_Exports.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+
+#include <MonCreateYACS.h>
+
+class HOMARD_EXPORT MonEditYACS : public MonCreateYACS
+{
+    Q_OBJECT
+public:
+    MonEditYACS( bool modal,
+                 HOMARD::HOMARD_Gen_var myHomardGen,
+                 QString Name );
+    virtual ~MonEditYACS();
+
+protected :
+    virtual void InitValEdit();
+    virtual bool CreateOrUpdate();
+
+public slots:
+
+};
+
+#endif
index 6febcd143829dc815b78cc7d531589cca50f024e..16369ffb7db12a29ec85bb670a6b60131a48df76 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,8 +17,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-using namespace std;
-
 #include "MonEditZone.h"
 
 #include "SalomeApp_Tools.h"
@@ -30,21 +28,22 @@ using namespace std;
 #include <SUIT_Session.h>
 #include <SUIT_ViewManager.h>
 
+using namespace std;
 
 // ------------------------------------------------------------------------
 MonEditZone::MonEditZone( MonCreateHypothesis* parent, bool modal,
                           HOMARD::HOMARD_Gen_var myHomardGen,
-                          QString caseName, QString zoneName ):
+                          QString caseName, QString Name ):
 // ------------------------------------------------------------------------
 /* Constructs a MonEditZone
     herite de MonCreateZone
 */
     MonCreateZone(parent, myHomardGen, caseName)
 {
-    MESSAGE("Debut de MonEditZone pour " << zoneName.toStdString().c_str());
+    MESSAGE("Debut de MonEditZone pour " << Name.toStdString().c_str());
     setWindowTitle(QObject::tr("HOM_ZONE_EDIT_WINDOW_TITLE"));
-    _aZoneName=zoneName;
-    aZone = _myHomardGen->GetZone(_aZoneName.toStdString().c_str());
+    _Name=Name;
+    aZone = myHomardGen->GetZone(_Name.toStdString().c_str());
     InitValEdit();
 }
 // ------------------------------------------------------------------------
@@ -58,13 +57,13 @@ void MonEditZone::InitValEdit()
 // ------------------------------------------------------------------------
 {
   MESSAGE("InitValEdit ");
-  LEZoneName->setText(_aZoneName);
-  LEZoneName->setReadOnly(true);
-  _ZoneType = aZone->GetZoneType();
-  MESSAGE("InitValEdit _ZoneType ="<<_ZoneType);
+  LEName->setText(_Name);
+  LEName->setReadOnly(true);
+  _Type = aZone->GetType();
+  MESSAGE("InitValEdit _Type ="<<_Type);
   InitValZoneLimit();
   if (_aCaseName != QString("")) InitValZone();
-  switch (_ZoneType)
+  switch (_Type)
   {
     case 11 : // il s agit d un rectangle
     { }
@@ -189,10 +188,10 @@ void MonEditZone::SetBox()
   adjustSize();
   RBCylinder->setDisabled(true);
   RBPipe->setDisabled(true);
-  if ( _ZoneType == 2 ) { RBSphere->setDisabled(true); }
+  if ( _Type == 2 ) { RBSphere->setDisabled(true); }
   else                  { RBSphere->setVisible(0);
-                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8));
-                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8));
+                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0));
+                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0));
                           SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ;
                           QPixmap pix = resMgr->loadPixmap( "HOMARD", "boxdxy.png" ) ;
                           QIcon IS=QIcon(pix) ;
@@ -219,11 +218,11 @@ void MonEditZone::SetBox()
   SpinBox_Zmini->setSingleStep(incr);
   SpinBox_Zmaxi->setSingleStep(incr);
 
-  if ( _ZoneType == 12 ) { SpinBox_Xmini->setDisabled(true) ;
+  if ( _Type == 12 ) { SpinBox_Xmini->setDisabled(true) ;
                            SpinBox_Xmaxi->setDisabled(true) ; }
-  else if ( _ZoneType == 13 ) { SpinBox_Ymini->setDisabled(true) ;
+  else if ( _Type == 13 ) { SpinBox_Ymini->setDisabled(true) ;
                                 SpinBox_Ymaxi->setDisabled(true) ; }
-  else if ( _ZoneType == 11 ) { SpinBox_Zmini->setDisabled(true) ;
+  else if ( _Type == 11 ) { SpinBox_Zmini->setDisabled(true) ;
                                 SpinBox_Zmaxi->setDisabled(true) ; }
 
 }
@@ -253,7 +252,6 @@ void MonEditZone::SetSphere()
   if ( _Zincr > 0) { SpinBox_Zcentre->setSingleStep(_Zincr); }
   else             { SpinBox_Zcentre->setSingleStep(1);}
 
-  SpinBox_Rayon->setMinimum(0.);
   SpinBox_Rayon->setValue(_ZoneRayon);
 }
 // ------------------------------------------------------------------------
@@ -268,13 +266,13 @@ void MonEditZone::SetCylinder()
   RBCylinder->setChecked(1);
   RBBox->setDisabled(true);
   RBPipe->setDisabled(true);
-  if ( _ZoneType == 5 ) { RBSphere->setDisabled(true); }
+  if ( _Type == 5 ) { RBSphere->setDisabled(true); }
   else                  { RBSphere->setVisible(0);
-                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8));
-                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8));
-                          TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
-                          TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
-                          TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8));
+                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0));
+                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0));
+                          TLXbase->setText(QApplication::translate("CreateZone", "X centre", 0));
+                          TLYbase->setText(QApplication::translate("CreateZone", "Y centre", 0));
+                          TLZbase->setText(QApplication::translate("CreateZone", "Z centre", 0));
                           SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ;
                           QPixmap pix = resMgr->loadPixmap( "HOMARD", "disk.png" ) ;
                           QIcon IS=QIcon(pix) ;
@@ -293,10 +291,9 @@ void MonEditZone::SetCylinder()
   if ( _Zincr > 0) { SpinBox_Zbase->setSingleStep(_Zincr); }
   else             { SpinBox_Zbase->setSingleStep(1) ;}
 
-  SpinBox_Radius->setMinimum(0.);
   SpinBox_Radius->setValue(_ZoneRayon);
 
-  if ( _ZoneType == 5 )
+  if ( _Type == 5 )
   { SpinBox_Xaxis->setValue(_ZoneXaxis) ;
     SpinBox_Yaxis->setValue(_ZoneYaxis) ;
     SpinBox_Zaxis->setValue(_ZoneZaxis) ;
@@ -311,9 +308,9 @@ void MonEditZone::SetCylinder()
     TLYaxis->setVisible(0) ;
     TLZaxis->setVisible(0) ;
     TLHaut->setVisible(0) ;
-    if ( _ZoneType == 32 ) { SpinBox_Xbase->setDisabled(true) ; }
-    else if ( _ZoneType == 33 ) { SpinBox_Ybase->setDisabled(true) ; }
-    else if ( _ZoneType == 31 ) { SpinBox_Zbase->setDisabled(true) ; }
+    if ( _Type == 32 ) { SpinBox_Xbase->setDisabled(true) ; }
+    else if ( _Type == 33 ) { SpinBox_Ybase->setDisabled(true) ; }
+    else if ( _Type == 31 ) { SpinBox_Zbase->setDisabled(true) ; }
   }
 }
 // ------------------------------------------------------------------------
@@ -328,13 +325,13 @@ void MonEditZone::SetPipe()
   RBPipe->setChecked(1);
   RBBox->setDisabled(true);
   RBCylinder->setDisabled(true);
-  if ( _ZoneType == 7 ) { RBSphere->setDisabled(true); }
+  if ( _Type == 7 ) { RBSphere->setDisabled(true); }
   else                  { RBSphere->setVisible(0);
-                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0, QApplication::UnicodeUTF8));
-                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0, QApplication::UnicodeUTF8));
-                          TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0, QApplication::UnicodeUTF8));
-                          TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0, QApplication::UnicodeUTF8));
-                          TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0, QApplication::UnicodeUTF8));
+                          RBPipe->setText(QApplication::translate("CreateZone", "Disk with hole", 0));
+                          RBCylinder->setText(QApplication::translate("CreateZone", "Disk", 0));
+                          TLXbase_p->setText(QApplication::translate("CreateZone", "X centre", 0));
+                          TLYbase_p->setText(QApplication::translate("CreateZone", "Y centre", 0));
+                          TLZbase_p->setText(QApplication::translate("CreateZone", "Z centre", 0));
                           SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr() ;
                           QPixmap pix = resMgr->loadPixmap( "HOMARD", "diskwithhole.png" ) ;
                           QIcon IS=QIcon(pix) ;
@@ -353,12 +350,10 @@ void MonEditZone::SetPipe()
   if ( _Zincr > 0) { SpinBox_Zbase_p->setSingleStep(_Zincr); }
   else             { SpinBox_Zbase_p->setSingleStep(1) ;}
 
-  SpinBox_Radius_int->setMinimum(0.);
   SpinBox_Radius_int->setValue(_ZoneRayonInt);
-  SpinBox_Radius_ext->setMinimum(0.);
   SpinBox_Radius_ext->setValue(_ZoneRayon);
 
-  if ( _ZoneType == 7 )
+  if ( _Type == 7 )
   { SpinBox_Xaxis_p->setValue(_ZoneXaxis) ;
     SpinBox_Yaxis_p->setValue(_ZoneYaxis) ;
     SpinBox_Zaxis_p->setValue(_ZoneZaxis) ;
@@ -373,9 +368,9 @@ void MonEditZone::SetPipe()
     TLYaxis_p->setVisible(0) ;
     TLZaxis_p->setVisible(0) ;
     TLHaut_p->setVisible(0) ;
-    if ( _ZoneType == 62 ) { SpinBox_Xbase_p->setDisabled(true) ; }
-    else if ( _ZoneType == 63 ) { SpinBox_Ybase_p->setDisabled(true) ; }
-    else if ( _ZoneType == 61 ) { SpinBox_Zbase_p->setDisabled(true) ; }
+    if ( _Type == 62 ) { SpinBox_Xbase_p->setDisabled(true) ; }
+    else if ( _Type == 63 ) { SpinBox_Ybase_p->setDisabled(true) ; }
+    else if ( _Type == 61 ) { SpinBox_Zbase_p->setDisabled(true) ; }
   }
 }
 
@@ -388,7 +383,7 @@ bool MonEditZone::CreateOrUpdateZone()
 {
   try
   {
-    switch (_ZoneType)
+    switch (_Type)
     {
       case 11 : // il s agit d un rectangle
       { }
@@ -425,7 +420,7 @@ bool MonEditZone::CreateOrUpdateZone()
         break;
       }
     }
-    if (Chgt) _myHomardGen->InvalideZone(_aZoneName.toStdString().c_str());
+    if (Chgt) myHomardGen->InvalideZone(_Name.toStdString().c_str());
     HOMARD_UTILS::updateObjBrowser();
   }
   catch( const SALOME::SALOME_Exception& S_ex ) {
index 8bc9f8c8d3b9375a52220230584188ebab36668a..435f20938e26a9d3634a1a9d0878602fe73f28e6 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,6 +20,8 @@
 #ifndef MON_EDITZONE_H
 #define MON_EDITZONE_H
 
+#include "HOMARDGUI_Exports.hxx"
+
 #include <SALOMEconfig.h>
 #include <SalomeApp_Module.h>
 
 
 #include <MonCreateZone.h>
 
-class MonEditZone : public MonCreateZone
+class HOMARD_EXPORT MonEditZone : public MonCreateZone
 {
     Q_OBJECT
 public:
     MonEditZone( MonCreateHypothesis* parent, bool modal,
                  HOMARD::HOMARD_Gen_var myHomardGen,
-                 QString caseName, QString zoneName);
+                 QString caseName, QString Name);
     virtual ~MonEditZone();
 
 protected :
diff --git a/src/HOMARDGUI/MonIterInfo.cxx b/src/HOMARDGUI/MonIterInfo.cxx
new file mode 100644 (file)
index 0000000..9dfc874
--- /dev/null
@@ -0,0 +1,175 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MonIterInfo.h"
+
+#include <QFile>
+#include <QTextStream>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include "MonEditFile.h"
+#include <utilities.h>
+
+using namespace std;
+
+// -----------------------------------------------------------------------------------------
+MonIterInfo::MonIterInfo(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen0, QString IterName)
+// -----------------------------------------------------------------------------------------
+/* Constructs a MonIterInfo
+ * Inherits from CasHomard
+ * Sets attributes to default values
+ */
+    :
+    Ui_IterInfo(),
+    _IterName(IterName),
+    _aCaseName(""),
+    _BlockSize(0),
+    _Connection(0),
+    _Diametre(0),
+    _Entanglement(0),
+    _Quality(0),
+    _Option(-1)
+{
+    MESSAGE("appel de _duplicate");
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+      setupUi(this);
+      setModal(modal);
+      InitConnect();
+
+      adjustSize();
+}
+
+// ------------------------------------------------------------------------
+MonIterInfo::~MonIterInfo()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::InitConnect()
+// ------------------------------------------------------------------------
+{
+    MESSAGE("InitConnect");
+    connect( CBBlockSize,    SIGNAL(stateChanged(int)), this, SLOT(SetBlockSize()));
+    connect( CBConnection,   SIGNAL(stateChanged(int)), this, SLOT(SetConnection()));
+    connect( CBDiametre,     SIGNAL(stateChanged(int)), this, SLOT(SetDiametre()));
+    connect( CBEntanglement, SIGNAL(stateChanged(int)), this, SLOT(SetEntanglement()));
+    connect( CBQuality,      SIGNAL(stateChanged(int)), this, SLOT(SetQuality()));
+
+    connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+    connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+}
+// -------------------------------
+bool MonIterInfo::PushOnApply()
+// --------------------------------
+{
+  MESSAGE("PushOnApply");
+
+  // Au moins une option a ete choisie
+  if ( ( _Quality == 0 ) && ( _Diametre == 0 ) && ( _Connection == 0 ) && ( _BlockSize == 0 ) && ( _Entanglement == 0 ) )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MESH_INFO_1") );
+    return false;
+  }
+
+  // Recuperation de l'iteration
+  aIter = myHomardGen->GetIteration(_IterName.toStdString().c_str()) ;
+
+  // Lancement de l'analyse
+  try
+  {
+    aIter->MeshInfoOption( _Quality, _Diametre, _Connection, _BlockSize, _Entanglement, _Option );
+  }
+  catch( SALOME::SALOME_Exception& S_ex )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+    return false;
+  }
+
+  // Le bilan de l'analyse a afficher
+  QString aFileName = aIter->GetFileInfo() ;
+  MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen), aFileName, 0 ) ;
+  if ( aDlg->_codret == 0 ) { aDlg->show(); }
+
+
+  HOMARD_UTILS::updateObjBrowser();
+  return true;
+}
+// ---------------------------
+void MonIterInfo::PushOnOK()
+// ---------------------------
+{
+     bool bOK = PushOnApply();
+     if ( bOK )  this->close();
+}
+//------------------------------
+void MonIterInfo::PushOnHelp()
+//-------------------------------
+{
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_mesh_info.html"), QString(""), QString(LanguageShort.c_str()));
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::SetBlockSize()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetBlockSize ");
+  if ( CBBlockSize->isChecked() ) { _BlockSize = 1 ; }
+  else                            { _BlockSize = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::SetConnection()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConnection ");
+  if ( CBConnection->isChecked() ) { _Connection = 1 ; }
+  else                             { _Connection = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::SetDiametre()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetDiametre ");
+  if ( CBDiametre->isChecked() ) { _Diametre = 1 ; }
+  else                           { _Diametre = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::SetEntanglement()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetEntanglement ");
+  if ( CBEntanglement->isChecked() ) { _Entanglement = 1 ; }
+  else                               { _Entanglement = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonIterInfo::SetQuality()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetQuality ");
+  if ( CBQuality->isChecked() ) { _Quality = 1 ; }
+  else                          { _Quality = 0 ; }
+}
diff --git a/src/HOMARDGUI/MonIterInfo.h b/src/HOMARDGUI/MonIterInfo.h
new file mode 100644 (file)
index 0000000..622d586
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MON_ITERINFO_H
+#define MON_ITERINFO_H
+
+#include "HOMARDGUI_Exports.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+#include CORBA_CLIENT_HEADER(HOMARD_Cas)
+
+#include "ui_IterInfo.h"
+#include <QDialog>
+#include <QWidget>
+
+class QListBox;
+
+class HOMARD_EXPORT MonIterInfo : public QDialog, public Ui_IterInfo
+{
+    Q_OBJECT
+
+public:
+    MonIterInfo( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen, QString IterName);
+    ~MonIterInfo();
+
+protected :
+    MonIterInfo( QWidget* parent, HOMARD::HOMARD_Gen_var myHomardGen, QString IterName );
+
+    QString _IterName;
+    QString _aCaseName;
+
+    int _BlockSize;
+    int _Connection;
+    int _Diametre;
+    int _Entanglement;
+    int _Quality;
+    int _Option;
+
+    HOMARD::HOMARD_Iteration_var aIter ;
+    HOMARD::HOMARD_Gen_var myHomardGen;
+
+    virtual void InitConnect();
+
+public slots:
+
+    virtual void SetBlockSize();
+    virtual void SetConnection();
+    virtual void SetEntanglement();
+    virtual void SetDiametre();
+    virtual void SetQuality();
+
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+};
+
+#endif // MON_ITERINFO_H
diff --git a/src/HOMARDGUI/MonMeshInfo.cxx b/src/HOMARDGUI/MonMeshInfo.cxx
new file mode 100644 (file)
index 0000000..3016e05
--- /dev/null
@@ -0,0 +1,281 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MonMeshInfo.h"
+#include "HOMARD.hxx"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include "MonEditFile.h"
+#include <utilities.h>
+
+#ifdef WIN32
+#include <direct.h>
+#endif
+
+using namespace std;
+
+// -----------------------------------------------------------------------------------------
+MonMeshInfo::MonMeshInfo(QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen0)
+// -----------------------------------------------------------------------------------------
+/* Constructs a MonMeshInfo
+ * Inherits from CasHomard
+ * Sets attributes to default values
+ */
+    :
+    Ui_MeshInfo(),
+    _aCaseName(""),_aDirName(""),
+    _BlockSize(0),
+    _Connection(0),
+    _Diametre(0),
+    _Entanglement(0),
+    _Quality(0)
+{
+      myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+      setupUi(this);
+      setModal(modal);
+      InitConnect();
+
+      SetNewCaseName() ;
+      adjustSize();
+}
+
+// ------------------------------------------------------------------------
+MonMeshInfo::~MonMeshInfo()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( LECaseName,     SIGNAL(textChanged(QString)), this, SLOT(CaseNameChanged()));
+    connect( PushDir,        SIGNAL(pressed()), this, SLOT(SetDirName()));
+    connect( PushFichier,    SIGNAL(pressed()), this, SLOT(SetFileName()));
+
+    connect( CBBlockSize,    SIGNAL(stateChanged(int)), this, SLOT(SetBlockSize()));
+    connect( CBConnection,   SIGNAL(stateChanged(int)), this, SLOT(SetConnection()));
+    connect( CBDiametre,     SIGNAL(stateChanged(int)), this, SLOT(SetDiametre()));
+    connect( CBEntanglement, SIGNAL(stateChanged(int)), this, SLOT(SetEntanglement()));
+    connect( CBQuality,      SIGNAL(stateChanged(int)), this, SLOT(SetQuality()));
+
+    connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+    connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+}
+// -------------------------------
+bool MonMeshInfo::PushOnApply()
+// --------------------------------
+{
+  MESSAGE("PushOnApply");
+  QString aCaseName=LECaseName->text().trimmed();
+  if ( aCaseName == "" )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_NAME") );
+    return false;
+  }
+
+  QString aDirName=LEDirName->text().trimmed();
+  if (aDirName == QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_1") );
+    return false;
+  }
+  if ( aDirName != _aDirName)
+  { QString CaseNameDir = myHomardGen->VerifieDir( aDirName.toStdString().c_str()) ;
+    if ( CaseNameDir != "" )
+    {
+      QString texte ;
+      texte = QObject::tr("HOM_CASE_DIRECTORY_2") + CaseNameDir ;
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                texte );
+      return false;
+    }
+  }
+  if (CHDIR(aDirName.toStdString().c_str()) != 0)
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_3") );
+    return false;
+  }
+
+  QString aFileName=LEFileName->text().trimmed();
+  if (aFileName ==QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_MESH") );
+    return false;
+  }
+
+  QString aMeshName = HOMARD_QT_COMMUN::LireNomMaillage(aFileName);
+  if (aMeshName == "" )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MED_FILE_2") );
+    return false;
+  }
+  if ( ( _Quality == 0 ) && ( _Diametre == 0 ) && ( _Connection == 0 ) && ( _BlockSize == 0 ) && ( _Entanglement == 0 ) )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MESH_INFO") );
+    return false;
+  }
+
+  if (aCaseName != _aCaseName )
+  {
+    _aCaseName = aCaseName;
+    try
+    {
+      myHomardGen->MeshInfo( \
+            CORBA::string_dup(_aCaseName.toStdString().c_str()),  \
+            CORBA::string_dup(aMeshName.toStdString().c_str()),  \
+            CORBA::string_dup(aFileName.toStdString().c_str()),  \
+            CORBA::string_dup(aDirName.toStdString().c_str()),  \
+            _Quality, _Diametre, _Connection, _BlockSize, _Entanglement );
+    }
+    catch( SALOME::SALOME_Exception& S_ex )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false;
+    }
+  }
+
+  // Le bilan de l'analyse a afficher
+  aCase = myHomardGen->GetCase(_aCaseName.toStdString().c_str());
+  string iter0 = aCase->GetIter0Name();
+  HOMARD::HOMARD_Iteration_var aIter =  myHomardGen->GetIteration(iter0.c_str());
+  aFileName = aIter->GetFileInfo() ;
+  MonEditFile *aDlg = new MonEditFile( 0, true, HOMARD::HOMARD_Gen::_duplicate(myHomardGen), aFileName, 1 ) ;
+  if ( aDlg->_codret == 0 ) { aDlg->show(); }
+
+HOMARD_UTILS::updateObjBrowser();
+  return true;
+}
+// ---------------------------
+void MonMeshInfo::PushOnOK()
+// ---------------------------
+{
+  bool bOK = PushOnApply();
+  if ( bOK )  this->close();
+}
+//------------------------------
+void MonMeshInfo::PushOnHelp()
+//-------------------------------
+{
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_case.html"), QString(""), QString(LanguageShort.c_str()));
+}
+// ---------------------------------
+void MonMeshInfo::SetNewCaseName()
+// ------------------------------
+{
+  HOMARD::listeCases_var  MyCases = myHomardGen->GetAllCasesName();
+  int num = 0; QString aCaseName="";
+  while (aCaseName=="" )
+  {
+    aCaseName.setNum(num+1) ;
+    aCaseName.insert(0, QString("Case_")) ;
+    for ( int i=0; i<MyCases->length(); i++)
+    {
+      if ( aCaseName == QString((MyCases)[i]) )
+      {
+        num ++ ;
+        aCaseName = "" ;
+        break ;
+      }
+   }
+  }
+  LECaseName->clear() ;
+  LECaseName->insert(aCaseName);
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetDirName()
+// ------------------------------------------------------------------------
+{
+  QString aDirName=QFileDialog::getExistingDirectory ();
+  if (!(aDirName.isEmpty()))LEDirName->setText(aDirName);
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetFileName()
+// ------------------------------------------------------------------------
+{
+  QString fileName0 = LEFileName->text().trimmed();
+  QString fileName = HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") ) ;
+  if (fileName.isEmpty()) fileName = fileName0 ;
+  LEFileName->setText(fileName);
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::CaseNameChanged()
+// ------------------------------------------------------------------------
+{
+  if (_aCaseName != LECaseName->text().trimmed())
+  {
+    LEFileName->setReadOnly(false);
+    PushFichier->show();
+  }
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetBlockSize()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetBlockSize ");
+  if ( CBBlockSize->isChecked() ) { _BlockSize = 1 ; }
+  else                            { _BlockSize = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetConnection()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConnection ");
+  if ( CBConnection->isChecked() ) { _Connection = 1 ; }
+  else                             { _Connection = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetDiametre()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetDiametre ");
+  if ( CBDiametre->isChecked() ) { _Diametre = 1 ; }
+  else                           { _Diametre = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetEntanglement()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetEntanglement ");
+  if ( CBEntanglement->isChecked() ) { _Entanglement = 1 ; }
+  else                               { _Entanglement = 0 ; }
+}
+// ------------------------------------------------------------------------
+void MonMeshInfo::SetQuality()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetQuality ");
+  if ( CBQuality->isChecked() ) { _Quality = 1 ; }
+  else                          { _Quality = 0 ; }
+}
diff --git a/src/HOMARDGUI/MonMeshInfo.h b/src/HOMARDGUI/MonMeshInfo.h
new file mode 100644 (file)
index 0000000..d8110e2
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MON_MESHINFO_H
+#define MON_MESHINFO_H
+
+#include "HOMARDGUI_Exports.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+#include CORBA_CLIENT_HEADER(HOMARD_Cas)
+
+#include "ui_MeshInfo.h"
+#include <QWidget>
+
+class HOMARD_EXPORT MonMeshInfo : public QDialog, public Ui_MeshInfo
+{
+    Q_OBJECT
+
+public:
+    MonMeshInfo( QWidget* parent, bool modal, HOMARD::HOMARD_Gen_var myHomardGen);
+    ~MonMeshInfo();
+
+protected :
+    QString _aCaseName;
+    QString _aDirName;
+
+    int _BlockSize;
+    int _Connection;
+    int _Diametre;
+    int _Entanglement;
+    int _Quality;
+
+    HOMARD::HOMARD_Cas_var aCase ;
+    HOMARD::HOMARD_Gen_var myHomardGen;
+
+    virtual void InitConnect();
+    virtual void SetNewCaseName();
+
+public slots:
+    virtual void SetDirName();
+    virtual void SetFileName();
+
+    virtual void SetBlockSize();
+    virtual void SetConnection();
+    virtual void SetEntanglement();
+    virtual void SetDiametre();
+    virtual void SetQuality();
+
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+    virtual void CaseNameChanged();
+};
+
+#endif // MON_MESHINFO_H
diff --git a/src/HOMARDGUI/MonPursueIteration.cxx b/src/HOMARDGUI/MonPursueIteration.cxx
new file mode 100644 (file)
index 0000000..3df97ca
--- /dev/null
@@ -0,0 +1,288 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MonPursueIteration.h"
+#include "HOMARD.hxx"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "HOMARDGUI_Utils.h"
+#include "HomardQtCommun.h"
+#include <utilities.h>
+
+#ifdef WIN32
+#include <direct.h>
+#endif
+
+using namespace std;
+
+// -----------------------------------------------------------------------------------------
+/* Constructs a MonPursueIteration
+ * Sets attributes to default values
+ */
+// -----------------------------------------------------------------------------------------
+MonPursueIteration::MonPursueIteration ( bool modal, HOMARD::HOMARD_Gen_var myHomardGen0 )
+    :
+    Ui_PursueIteration(),
+    _aCaseName(""), _aDirName(""), _aDirNameStart("")
+{
+  MESSAGE("Debut du constructeur de MonPursueIteration");
+  myHomardGen=HOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  setupUi(this);
+  setModal(modal);
+
+  InitConnect();
+
+  SetNewCaseName() ;
+  _Type = 1 ;
+  GBIterationintoCase->setVisible(0);
+  SpinBoxNumber->setVisible(0);
+
+  adjustSize();
+  MESSAGE("Fin du constructeur de MonPursueIteration");
+}
+
+// ------------------------------------------------------------------------
+MonPursueIteration::~MonPursueIteration()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( PushDir,        SIGNAL(pressed()), this, SLOT(SetDirName()));
+
+    connect( RBIteration,    SIGNAL(clicked()), this, SLOT(FromIteration()));
+    connect( RBCase,         SIGNAL(clicked()), this, SLOT(FromCase()));
+    connect( PushDirStart,   SIGNAL(pressed()), this, SLOT(SetDirNameStart()));
+
+    connect( RBCaseLastIteration, SIGNAL(clicked()), this, SLOT(CaseLastIteration()));
+    connect( RBCaseNIteration,    SIGNAL(clicked()), this, SLOT(CaseNIteration()));
+
+    connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+    connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+    connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+}
+// -------------------------------
+bool MonPursueIteration::PushOnApply()
+// --------------------------------
+{
+  MESSAGE("PushOnApply");
+// 1. Enregistrement du repertoire du cas
+  QString aDirName=LEDirName->text().trimmed();
+  if (aDirName == QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_1") );
+    return false;
+  }
+  if ( aDirName != _aDirName)
+  { QString CaseNameDir = myHomardGen->VerifieDir( aDirName.toStdString().c_str()) ;
+    if ( CaseNameDir != "" )
+    {
+      QString texte ;
+      texte = QObject::tr("HOM_CASE_DIRECTORY_2") + CaseNameDir ;
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                texte );
+      return false;
+    }
+  }
+  if (CHDIR(aDirName.toStdString().c_str()) != 0)
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_3") );
+    return false;
+  }
+// 2. Enregistrement du repertoire de depart
+  QString aDirNameStart=LEDirNameStart->text().trimmed();
+  if (aDirNameStart == QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_START_DIRECTORY_1") );
+    return false;
+  }
+  if (CHDIR(aDirNameStart.toStdString().c_str()) != 0)
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_START_DIRECTORY_3") );
+    return false;
+  }
+
+// 3. Enregistrement du numero d'iteration
+  int Number ;
+  if ( _Type == 3 ) { Number = SpinBoxNumber->value() ; }
+
+// 4. Creation du cas
+  QString _aCaseName=LECaseName->text().trimmed();
+  _aDirNameStart=aDirNameStart;
+
+  MESSAGE("_aCaseName = "<<_aCaseName.toStdString().c_str());
+  MESSAGE("_aDirNameStart = "<<_aDirNameStart.toStdString().c_str());
+  MESSAGE("_Type = "<<_Type);
+  switch (_Type)
+  {
+    case 1 : // Poursuite a partir d'une iteration
+    {
+      try
+      {
+        MESSAGE("Poursuite a partir d'une iteration");
+        aCase = myHomardGen->CreateCaseFromIteration( \
+                  CORBA::string_dup(_aCaseName.toStdString().c_str()),  \
+                  CORBA::string_dup(_aDirNameStart.toStdString().c_str()) );
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+    case 2 : // Poursuite a partir de la derniere iteration dans un cas
+    {
+      try
+      {
+        MESSAGE("Poursuite a partir de la derniere iteration dans un cas");
+        aCase = myHomardGen->CreateCaseFromCaseLastIteration( \
+                  CORBA::string_dup(_aCaseName.toStdString().c_str()),  \
+                  CORBA::string_dup(_aDirNameStart.toStdString().c_str()) );
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+    case 3 : // Poursuite a partir d'une iteration dans un cas
+    {
+      try
+      {
+        MESSAGE("Poursuite a partir d'une iteration dans un cas");
+        aCase = myHomardGen->CreateCaseFromCaseIteration( \
+                  CORBA::string_dup(_aCaseName.toStdString().c_str()),  \
+                  CORBA::string_dup(_aDirNameStart.toStdString().c_str()),  \
+                  Number );
+      }
+      catch( SALOME::SALOME_Exception& S_ex )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+        return false ;
+      }
+      break;
+    }
+  }
+
+  aCase->SetDirName(aDirName.toStdString().c_str());
+  _aDirName=aDirName;
+
+  HOMARD_UTILS::updateObjBrowser();
+
+  return true;
+}
+// ---------------------------
+void MonPursueIteration::PushOnOK()
+// ---------------------------
+{
+  bool bOK = PushOnApply();
+  if ( bOK )  this->close();
+}
+//------------------------------
+void MonPursueIteration::PushOnHelp()
+//-------------------------------
+{
+  std::string LanguageShort = myHomardGen->GetLanguageShort();
+  HOMARD_UTILS::PushOnHelp(QString("gui_create_case.html"), QString(""), QString(LanguageShort.c_str()));
+}
+// ---------------------------------
+void MonPursueIteration::SetNewCaseName()
+// ------------------------------
+{
+  HOMARD::listeCases_var  MyCases = myHomardGen->GetAllCasesName();
+  int num = 0; QString aCaseName="";
+  while (aCaseName=="" )
+  {
+    aCaseName.setNum(num+1) ;
+    aCaseName.insert(0, QString("Case_")) ;
+    for ( int i=0; i<MyCases->length(); i++)
+    {
+      if ( aCaseName == QString((MyCases)[i]))
+      {
+        num ++ ;
+        aCaseName = "" ;
+        break ;
+      }
+   }
+  }
+  LECaseName->clear() ;
+  LECaseName->insert(aCaseName);
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::SetDirName()
+// ------------------------------------------------------------------------
+{
+  QString aDirName=QFileDialog::getExistingDirectory ();
+  if (!(aDirName.isEmpty()))LEDirName->setText(aDirName);
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::SetDirNameStart()
+// ------------------------------------------------------------------------
+{
+  QString aDirName=QFileDialog::getExistingDirectory ();
+  if (!(aDirName.isEmpty()))LEDirNameStart->setText(aDirName);
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::FromIteration()
+// ------------------------------------------------------------------------
+{
+  GBIterationintoCase->setVisible(0);
+  SpinBoxNumber->setVisible(0);
+  _Type = 1 ;
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::FromCase()
+// ------------------------------------------------------------------------
+{
+  GBIterationintoCase->setVisible(1);
+  CaseLastIteration();
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::CaseLastIteration()
+// ------------------------------------------------------------------------
+{
+  SpinBoxNumber->setVisible(0);
+  _Type = 2 ;
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void MonPursueIteration::CaseNIteration()
+// ------------------------------------------------------------------------
+{
+  SpinBoxNumber->setVisible(1);
+  _Type = 3 ;
+  adjustSize();
+}
diff --git a/src/HOMARDGUI/MonPursueIteration.h b/src/HOMARDGUI/MonPursueIteration.h
new file mode 100644 (file)
index 0000000..11c885c
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MON_PURSUEITERATION_H
+#define MON_PURSUEITERATION_H
+
+#include "HOMARDGUI_Exports.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(HOMARD_Gen)
+#include CORBA_CLIENT_HEADER(HOMARD_Cas)
+
+#include "ui_PursueIteration.h"
+#include <QWidget>
+
+class HOMARD_EXPORT MonPursueIteration : public QDialog, public Ui_PursueIteration
+{
+    Q_OBJECT
+
+  public:
+    MonPursueIteration( bool modal, HOMARD::HOMARD_Gen_var myHomardGen );
+    virtual ~MonPursueIteration();
+
+  protected :
+    QString _aCaseName;
+    QString _aDirName;
+    QString _aDirNameStart;
+
+    int _Type ;
+
+    HOMARD::HOMARD_Cas_var aCase ;
+    HOMARD::HOMARD_Gen_var myHomardGen;
+
+    virtual void InitConnect();
+    virtual void SetNewCaseName();
+
+  public slots:
+    virtual void SetDirName();
+
+    virtual void FromIteration();
+    virtual void FromCase();
+    virtual void SetDirNameStart();
+
+    virtual void CaseLastIteration();
+    virtual void CaseNIteration();
+
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+};
+
+#endif // MON_PURSUEITERATION_H
diff --git a/src/HOMARDGUI/PursueIteration.ui b/src/HOMARDGUI/PursueIteration.ui
new file mode 100644 (file)
index 0000000..ad3de23
--- /dev/null
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PursueIteration</class>
+ <widget class="QDialog" name="PursueIteration">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>601</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Pursue an iteration</string>
+  </property>
+  <property name="autoFillBackground">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0" colspan="2">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="Name">
+       <property name="text">
+        <string>Name</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LECaseName">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" colspan="3">
+    <layout class="QHBoxLayout" name="_2">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="Directory">
+       <property name="text">
+        <string>Directory</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="PushDir">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LEDirName">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <widget class="QRadioButton" name="RBIteration">
+     <property name="text">
+      <string>From an iteration</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QRadioButton" name="RBCase">
+     <property name="text">
+      <string>From a case</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" colspan="3">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="DirectoryStart">
+       <property name="text">
+        <string>Directory</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="PushDirStart">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="LEDirNameStart">
+       <property name="minimumSize">
+        <size>
+         <width>382</width>
+         <height>21</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="4" column="0" colspan="2">
+    <widget class="QGroupBox" name="GBIterationintoCase">
+     <property name="title">
+      <string>Iteration into the case</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="RBCaseLastIteration">
+        <property name="text">
+         <string>Last iteration</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="RBCaseNIteration">
+        <property name="text">
+         <string>Iteration number</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="SpinBoxNumber">
+        <property name="maximum">
+         <number>1789</number>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="5" column="0" colspan="2">
+    <widget class="QGroupBox" name="GroupButtons">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>9</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="0" column="4">
+       <widget class="QPushButton" name="buttonHelp">
+        <property name="text">
+         <string>Help</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="buttonApply">
+        <property name="text">
+         <string>Apply</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="buttonOk">
+        <property name="text">
+         <string>OK</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="text">
+         <string>Cancel</string>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="5" column="2">
+    <spacer name="spacer_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>128</width>
+       <height>25</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/HOMARD_I/CMakeLists.txt b/src/HOMARD_I/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d6aecda
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# --- options ---
+# additional include directories
+INCLUDE_DIRECTORIES(
+  ${OMNIORB_INCLUDE_DIR}
+  ${KERNEL_INCLUDE_DIRS}
+  ${MEDFILE_INCLUDE_DIRS}
+  ${SMESH_INCLUDE_DIRS}
+  ${GEOM_INCLUDE_DIRS}
+  ${HDF5_INCLUDE_DIRS}
+  ${PROJECT_BINARY_DIR}
+  ${PROJECT_BINARY_DIR}/idl
+  ${PROJECT_BINARY_DIR}/adm_local/unix
+  ${PROJECT_SOURCE_DIR}/src/HOMARD
+  ${PROJECT_SOURCE_DIR}/src/HOMARDGUI
+)
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(
+  ${OMNIORB_DEFINITIONS}
+)
+
+# libraries to link to
+SET(_link_LIBRARIES
+  ${MEDFILE_C_LIBRARIES}
+  ${KERNEL_SalomeContainer}
+  ${KERNEL_SalomeNS}
+  ${KERNEL_Registry}
+  ${KERNEL_SalomeHDFPersist}
+  ${KERNEL_SalomeLifeCycleCORBA}
+  ${KERNEL_TOOLSDS}
+  ${KERNEL_SalomeGenericObj}
+  ${SMESH_SalomeIDLSMESH}
+  SalomeIDLHOMARD
+  HOMARDImpl
+)
+
+# --- headers ---
+
+# header files / no moc processing
+SET(HOMARDEngine_HEADERS
+  HOMARD_Cas_i.hxx
+  HOMARD_Hypothesis_i.hxx
+  HOMARD_Iteration_i.hxx
+  HOMARD_Zone_i.hxx
+  HOMARD_Gen_i.hxx
+  HOMARD_Boundary_i.hxx
+  HOMARD_YACS_i.hxx
+  HomardMedCommun.h
+  HOMARD_i.hxx 
+)
+
+# --- sources ---
+
+# sources / static
+SET(HOMARDEngine_SOURCES
+  HOMARD_Cas_i.cxx
+  HOMARD_Hypothesis_i.cxx
+  HOMARD_Iteration_i.cxx
+  HOMARD_Gen_i.cxx
+  HOMARD_Zone_i.cxx
+  HOMARD_Boundary_i.cxx
+  HOMARD_YACS_i.cxx
+  HomardMedCommun.cxx
+)
+
+# --- rules ---
+
+ADD_LIBRARY(HOMARDEngine ${HOMARDEngine_SOURCES})
+TARGET_LINK_LIBRARIES(HOMARDEngine ${_link_LIBRARIES} )
+INSTALL(TARGETS HOMARDEngine EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
+INSTALL(FILES ${HOMARDEngine_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
\ No newline at end of file
index c483fe57dbd0ac6177cfa5192916671dea1e5e27..3cb92a5651a41d88a9b34a7a6068fcc299a220e8 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
 #include "HOMARD_Boundary_i.hxx"
 #include "HOMARD_Gen_i.hxx"
 #include "HOMARD_Boundary.hxx"
@@ -34,7 +43,6 @@ HOMARD_Boundary_i::HOMARD_Boundary_i()
   MESSAGE( "Default constructor, not for use" );
   ASSERT( 0 );
 }
-
 //=============================================================================
 /*!
  *  standard constructor
@@ -54,79 +62,91 @@ HOMARD_Boundary_i::HOMARD_Boundary_i( CORBA::ORB_ptr orb,
  *  standard destructor
  */
 //=============================================================================
-
 HOMARD_Boundary_i::~HOMARD_Boundary_i()
 {
 }
-
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Boundary_i::SetName( const char* NomBoundary )
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary_i::SetName( const char* Name )
 {
   ASSERT( myHomardBoundary );
-  myHomardBoundary->SetName( NomBoundary );
+  myHomardBoundary->SetName( Name );
 }
-
 //=============================================================================
 char* HOMARD_Boundary_i::GetName()
 {
   ASSERT( myHomardBoundary );
   return CORBA::string_dup( myHomardBoundary->GetName().c_str() );
 }
-
+//=============================================================================
+CORBA::Long  HOMARD_Boundary_i::Delete()
+{
+  ASSERT( myHomardBoundary );
+  char* BoundaryName = GetName() ;
+  MESSAGE ( "Delete : destruction de la frontiere " << BoundaryName );
+  return _gen_i->DeleteBoundary(BoundaryName) ;
+}
 //=============================================================================
 char* HOMARD_Boundary_i::GetDumpPython()
 {
   ASSERT( myHomardBoundary );
   return CORBA::string_dup( myHomardBoundary->GetDumpPython().c_str() );
 }
-
-
 //=============================================================================
-void HOMARD_Boundary_i::SetBoundaryType( CORBA::Long BoundaryType )
+std::string HOMARD_Boundary_i::Dump() const
 {
-  ASSERT( myHomardBoundary );
-  myHomardBoundary->SetBoundaryType( BoundaryType );
+  return HOMARD::Dump( *myHomardBoundary );
 }
-
 //=============================================================================
-CORBA::Long HOMARD_Boundary_i::GetBoundaryType()
+bool HOMARD_Boundary_i::Restore( const std::string& stream )
 {
-  ASSERT( myHomardBoundary );
-  return  CORBA::Long( myHomardBoundary->GetBoundaryType() );
+  return HOMARD::Restore( *myHomardBoundary, stream );
 }
-
 //=============================================================================
-void HOMARD_Boundary_i::SetMeshFile( const char* MeshFile )
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary_i::SetType( CORBA::Long Type )
 {
   ASSERT( myHomardBoundary );
-  myHomardBoundary->SetMeshFile( MeshFile );
-  _gen_i->PublishResultInSmesh(MeshFile, 0);
+  myHomardBoundary->SetType( Type );
 }
 //=============================================================================
-char* HOMARD_Boundary_i::GetMeshFile()
+CORBA::Long HOMARD_Boundary_i::GetType()
 {
   ASSERT( myHomardBoundary );
-  return CORBA::string_dup( myHomardBoundary->GetMeshFile().c_str() );
+  return  CORBA::Long( myHomardBoundary->GetType() );
 }
-
 //=============================================================================
 void HOMARD_Boundary_i::SetMeshName( const char* MeshName )
 {
   ASSERT( myHomardBoundary );
   myHomardBoundary->SetMeshName( MeshName );
 }
-
 //=============================================================================
 char* HOMARD_Boundary_i::GetMeshName()
 {
   ASSERT( myHomardBoundary );
   return CORBA::string_dup( myHomardBoundary->GetMeshName().c_str() );
 }
-
-
+//=============================================================================
+void HOMARD_Boundary_i::SetMeshFile( const char* MeshFile )
+{
+  ASSERT( myHomardBoundary );
+  myHomardBoundary->SetMeshFile( MeshFile );
+  int PublisMeshIN = _gen_i->GetPublisMeshIN () ;
+  if ( PublisMeshIN != 0 ) { _gen_i->PublishResultInSmesh(MeshFile, 0); }
+}
+//=============================================================================
+char* HOMARD_Boundary_i::GetMeshFile()
+{
+  ASSERT( myHomardBoundary );
+  return CORBA::string_dup( myHomardBoundary->GetMeshFile().c_str() );
+}
 //=============================================================================
 void HOMARD_Boundary_i::SetCylinder( double X0, double X1, double X2, double X3, double X4, double X5, double X6 )
 {
@@ -139,7 +159,24 @@ void HOMARD_Boundary_i::SetSphere( double Xcentre, double Ycentre, double ZCentr
   ASSERT( myHomardBoundary );
   myHomardBoundary->SetSphere( Xcentre, Ycentre, ZCentre, rayon );
 }
-
+//=============================================================================
+void HOMARD_Boundary_i::SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2)
+{
+  ASSERT( myHomardBoundary );
+  myHomardBoundary->SetConeR( Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2 );
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle, double Xcentre, double Ycentre, double Zcentre)
+{
+  ASSERT( myHomardBoundary );
+  myHomardBoundary->SetConeA( Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre );
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetTorus( double X0, double X1, double X2, double X3, double X4, double X5, double X6, double X7 )
+{
+  ASSERT( myHomardBoundary );
+  myHomardBoundary->SetTorus( X0, X1, X2, X3, X4, X5, X6, X7 );
+}
 //=============================================================================
 HOMARD::double_array* HOMARD_Boundary_i::GetCoords()
 {
@@ -153,14 +190,12 @@ HOMARD::double_array* HOMARD_Boundary_i::GetCoords()
     aResult[i++] = (*it);
   return aResult._retn();
 }
-
 //=============================================================================
 void HOMARD_Boundary_i::SetLimit( double Xincr, double Yincr, double Zincr )
 {
   ASSERT( myHomardBoundary );
   myHomardBoundary->SetLimit( Xincr, Yincr, Zincr );
 }
-
 //=============================================================================
 HOMARD::double_array* HOMARD_Boundary_i::GetLimit()
 {
@@ -175,22 +210,6 @@ HOMARD::double_array* HOMARD_Boundary_i::GetLimit()
   return aResult._retn();
 }
 //=============================================================================
-/*!
- */
-//=============================================================================
-void HOMARD_Boundary_i::SetCaseCreation( const char* NomCaseCreation )
-{
-  ASSERT( myHomardBoundary );
-  myHomardBoundary->SetCaseCreation( NomCaseCreation );
-}
-
-//=============================================================================
-char* HOMARD_Boundary_i::GetCaseCreation()
-{
-  ASSERT( myHomardBoundary );
-  return CORBA::string_dup( myHomardBoundary->GetCaseCreation().c_str() );
-}
-//=============================================================================
 void HOMARD_Boundary_i::AddGroup( const char* Group)
 {
   ASSERT( myHomardBoundary );
@@ -222,17 +241,22 @@ HOMARD::ListGroupType*  HOMARD_Boundary_i::GetGroups()
   }
   return aResult._retn();
 }
-
-
-
 //=============================================================================
-std::string HOMARD_Boundary_i::Dump() const
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary_i::SetCaseCreation( const char* NomCaseCreation )
 {
-  return HOMARD::Dump( *myHomardBoundary );
+  ASSERT( myHomardBoundary );
+  myHomardBoundary->SetCaseCreation( NomCaseCreation );
 }
-
 //=============================================================================
-bool HOMARD_Boundary_i::Restore( const std::string& stream )
+char* HOMARD_Boundary_i::GetCaseCreation()
 {
-  return HOMARD::Restore( *myHomardBoundary, stream );
+  ASSERT( myHomardBoundary );
+  return CORBA::string_dup( myHomardBoundary->GetCaseCreation().c_str() );
 }
+
+
+
index c048c9f46683c0a6866efa4714222702fc3cec45..ba26c743695bee61ace8a0f5e82614772b79cd3c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_Boundary_I_HXX_
 #define _HOMARD_Boundary_I_HXX_
 
@@ -24,6 +34,7 @@
 #include CORBA_SERVER_HEADER(HOMARD_Gen)
 #include CORBA_SERVER_HEADER(HOMARD_Boundary)
 
+#include "HOMARD_i.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -32,7 +43,7 @@
 
 class HOMARD_Boundary;
 
-class HOMARD_Boundary_i:
+class HOMARDENGINE_EXPORT HOMARD_Boundary_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Boundary,
   public virtual PortableServer::ServantBase
@@ -43,41 +54,53 @@ public:
 
   virtual ~HOMARD_Boundary_i();
 
-  void                   SetName( const char* NomBoundary );
+// Generalites
+  void                   SetName( const char* Name );
   char*                  GetName();
-  char*                  GetDumpPython();
 
-  void                   SetBoundaryType( CORBA::Long BoundaryType );
+  CORBA::Long            Delete();
 
-  CORBA::Long            GetBoundaryType();
+  char*                  GetDumpPython();
 
-  void                   SetMeshFile( const char* MeshFile );
-  char*                  GetMeshFile();
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
+
+// Caracteristiques
+  void                   SetType( CORBA::Long Type );
+  CORBA::Long            GetType();
 
   void                   SetMeshName( const char* MeshName );
   char*                  GetMeshName();
 
+  void                   SetMeshFile( const char* MeshFile );
+  char*                  GetMeshFile();
+
   void                   SetCylinder( double Xcentre, double Ycentre, double ZCentre,
                                       double Xaxe, double Yaxe, double Zaxe,
                                       double rayon );
   void                   SetSphere( double Xcentre, double Ycentre, double ZCentre,
                                     double rayon );
+  void                   SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                   double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2);
+  void                   SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                   double Xcentre, double Ycentre, double ZCentre);
+  void                   SetTorus( double Xcentre, double Ycentre, double ZCentre,
+                                      double Xaxe, double Yaxe, double Zaxe,
+                                      double rayonRev, double rayonPri );
+
   HOMARD::double_array*  GetCoords();
 
-  HOMARD::double_array*  GetLimit();
   void                   SetLimit( double Xincr, double Yincr, double Zincr);
+  HOMARD::double_array*  GetLimit();
 
+  void                   AddGroup( const char* Group);
+  void                   SetGroups(const HOMARD::ListGroupType& ListGroup);
+  HOMARD::ListGroupType* GetGroups();
 
-  std::string            Dump() const;
-  bool                   Restore( const std::string& stream );
-
+// Liens avec les autres structures
   void                   SetCaseCreation( const char* NomCaseCreation );
   char*                  GetCaseCreation();
 
-  void                    AddGroup( const char* Group);
-  void                    SetGroups(const HOMARD::ListGroupType& ListGroup);
-  HOMARD::ListGroupType*  GetGroups();
-
 
 private:
   ::HOMARD_Boundary*     myHomardBoundary;
index 7d75ff308a95aeca18a7ed1ca4d9d43bc1b062df..6558e235baf9304168e6c956a3748e8fc13ed994 100755 (executable)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #include "HOMARD_Cas_i.hxx"
 #include "HOMARD_Gen_i.hxx"
 #include "HOMARD_Cas.hxx"
 #include "HOMARD_DriverTools.hxx"
+#include "HOMARD.hxx"
 
 #include "utilities.h"
 #include <vector>
+#include <sys/stat.h>
+
+#ifdef WIN32
+#include <direct.h>
+#endif
 
 //=============================================================================
 /*!
@@ -59,100 +75,189 @@ HOMARD_Cas_i::HOMARD_Cas_i( CORBA::ORB_ptr orb,
 HOMARD_Cas_i::~HOMARD_Cas_i()
 {
 }
-
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Cas_i::SetDirName( const char* NomDir )
-{
-  ASSERT( myHomardCas );
-  myHomardCas->SetDirName( NomDir );
-}
-
+// Generalites
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Cas_i::SetName( const char* NomCas )
+void HOMARD_Cas_i::SetName( const char* Name )
 {
   ASSERT( myHomardCas );
-  myHomardCas->SetName( NomCas );
+  myHomardCas->SetName( Name );
 }
-
-//=============================================================================
-/*!
- */
 //=============================================================================
 char* HOMARD_Cas_i::GetName()
 {
   ASSERT( myHomardCas );
   return CORBA::string_dup( myHomardCas->GetName().c_str() );
 }
-
 //=============================================================================
-/*!
- */
+CORBA::Long  HOMARD_Cas_i::Delete( CORBA::Long Option )
+{
+  ASSERT( myHomardCas );
+  char* CaseName = GetName() ;
+  MESSAGE ( "Delete : destruction du cas " << CaseName << ", Option = " << Option );
+  return _gen_i->DeleteCase(CaseName, Option) ;
+}
 //=============================================================================
 char* HOMARD_Cas_i::GetDumpPython()
 {
   ASSERT( myHomardCas );
   return CORBA::string_dup( myHomardCas->GetDumpPython().c_str() );
 }
-
+//=============================================================================
+std::string HOMARD_Cas_i::Dump() const
+{
+  return HOMARD::Dump( *myHomardCas );
+}
+//=============================================================================
+bool HOMARD_Cas_i::Restore( const std::string& stream )
+{
+  return HOMARD::Restore( *myHomardCas, stream );
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Cas_i::SetDirName( const char* NomDir )
+{
+  ASSERT( myHomardCas );
+  int codret ;
+  // A. recuperation du nom ; on ne fait rien si c'est le meme
+  char* oldrep = GetDirName() ;
+  if ( strcmp(oldrep,NomDir) == 0 )
+  {
+   return ;
+  }
+  MESSAGE ( "SetDirName : passage de oldrep = "<< oldrep << " a NomDir = "<<NomDir);
+  // B. controle de l'usage du repertoire
+  char* CaseName = GetName() ;
+  char* casenamedir = _gen_i->VerifieDir(NomDir) ;
+  if ( ( std::string(casenamedir).size() > 0 ) & ( strcmp(CaseName,casenamedir)!=0 ) )
+  {
+    INFOS ( "Le repertoire " << NomDir << " est deja utilise pour le cas "<< casenamedir );
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text ;
+    text = "The directory " + std::string(NomDir) + " is already used for the case " + std::string(casenamedir) ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  // C. Changement/creation du repertoire
+  codret = myHomardCas->SetDirName( NomDir );
+  if ( codret != 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text ;
+    if ( codret == 1 ) { text = "The directory for the case cannot be modified because some iterations are already defined." ; }
+    else               { text = "The directory for the case cannot be reached." ; }
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  // D. En cas de reprise, deplacement du point de depart
+  if ( GetState() != 0 )
+  {
+    MESSAGE ( "etat : " << GetState() ) ;
+    // D.1. Nom local du repertoire de l'iteration de depart dans le repertoire actuel du cas
+    HOMARD::HOMARD_Iteration_ptr Iter = GetIter0() ;
+    char* DirNameIter = Iter->GetDirNameLoc() ;
+    MESSAGE ( "SetDirName : nom actuel pour le repertoire de l iteration, DirNameIter = "<< DirNameIter);
+    // D.2. Recherche d'un nom local pour l'iteration de depart dans le futur repertoire du cas
+    char* nomDirIter = _gen_i->CreateDirNameIter(NomDir, 0 );
+    MESSAGE ( "SetDirName : nom futur pour le repertoire de l iteration, nomDirIter = "<< nomDirIter);
+    // D.3. Creation du futur repertoire local pour l'iteration de depart
+    std::string nomDirIterTotal ;
+    nomDirIterTotal = std::string(NomDir) + "/" + std::string(nomDirIter) ;
+#ifndef WIN32
+    if (mkdir(nomDirIterTotal.c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
+#else
+    if (_mkdir(nomDirIterTotal.c_str()) != 0)
+#endif
+    {
+      MESSAGE ( "nomDirIterTotal : " << nomDirIterTotal ) ;
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The directory for the starting iteration cannot be created." ;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    // D.4. Deplacement du contenu du repertoire
+    std::string oldnomDirIterTotal ;
+    oldnomDirIterTotal = std::string(oldrep) + "/" + std::string(DirNameIter) ;
+    std::string commande = "mv " + std::string(oldnomDirIterTotal) + "/*" + " " + std::string(nomDirIterTotal) ;
+    codret = system(commande.c_str()) ;
+    if ( codret != 0 )
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The starting point for the case cannot be moved into the new directory." ;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    commande = "rm -rf " + std::string(oldnomDirIterTotal) ;
+    codret = system(commande.c_str()) ;
+    if ( codret != 0 )
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The starting point for the case cannot be deleted." ;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    // D.5. Memorisation du nom du repertoire de l'iteration
+    Iter->SetDirNameLoc(nomDirIter) ;
+  }
+  return ;
+}
 //=============================================================================
 char* HOMARD_Cas_i::GetDirName()
 {
   ASSERT( myHomardCas );
   return CORBA::string_dup( myHomardCas->GetDirName().c_str() );
 }
-
 //=============================================================================
-void HOMARD_Cas_i::SetConfType( CORBA::Long ConfType )
+CORBA::Long HOMARD_Cas_i::GetState()
 {
   ASSERT( myHomardCas );
-  myHomardCas->SetConfType( ConfType );
+// Nom de l'iteration initiale
+  char* Iter0Name = GetIter0Name() ;
+  HOMARD::HOMARD_Iteration_ptr Iter = _gen_i->GetIteration(Iter0Name) ;
+  int state = Iter->GetNumber() ;
+  return state ;
 }
 //=============================================================================
-CORBA::Long HOMARD_Cas_i::GetNumber()
+CORBA::Long HOMARD_Cas_i::GetNumberofIter()
 {
   ASSERT( myHomardCas );
-  return myHomardCas->GetNumber();
+  return myHomardCas->GetNumberofIter();
 }
-
 //=============================================================================
-CORBA::Long HOMARD_Cas_i::GetConfType()
+void HOMARD_Cas_i::SetConfType( CORBA::Long ConfType )
 {
   ASSERT( myHomardCas );
-  return myHomardCas->GetConfType();
+//   VERIFICATION( (ConfType>=-2) && (ConfType<=3) );
+  myHomardCas->SetConfType( ConfType );
 }
-
 //=============================================================================
-void HOMARD_Cas_i::AddIteration( const char* NomIteration )
+CORBA::Long HOMARD_Cas_i::GetConfType()
 {
   ASSERT( myHomardCas );
-  myHomardCas->AddIteration( NomIteration );
+  return myHomardCas->GetConfType();
 }
-
 //=============================================================================
-char* HOMARD_Cas_i::GetIter0Name()
+void HOMARD_Cas_i::SetExtType( CORBA::Long ExtType )
 {
   ASSERT( myHomardCas );
-  return CORBA::string_dup( myHomardCas->GetIter0Name().c_str() );
+//   VERIFICATION( (ExtType>=0) && (ExtType<=2) );
+  myHomardCas->SetExtType( ExtType );
 }
 //=============================================================================
-HOMARD::extrema* HOMARD_Cas_i::GetBoundingBox()
+CORBA::Long HOMARD_Cas_i::GetExtType()
 {
-  ASSERT(myHomardCas );
-  HOMARD::extrema_var aResult = new HOMARD::extrema();
-  std::vector<double> LesExtremes = myHomardCas->GetBoundingBox();
-  ASSERT( LesExtremes.size() == 10 );
-  aResult->length( 10 );
-  for ( int i = 0; i < LesExtremes.size(); i++ )
-  {
-    aResult[i] = LesExtremes[i];
-  }
-  return aResult._retn();
+  ASSERT( myHomardCas );
+  return myHomardCas->GetExtType();
 }
 //=============================================================================
 void HOMARD_Cas_i::SetBoundingBox( const HOMARD::extrema& LesExtrema )
@@ -165,10 +270,23 @@ void HOMARD_Cas_i::SetBoundingBox( const HOMARD::extrema& LesExtrema )
   {
     VExtrema[i] = LesExtrema[i];
   }
-
   myHomardCas->SetBoundingBox( VExtrema );
 }
 //=============================================================================
+HOMARD::extrema* HOMARD_Cas_i::GetBoundingBox()
+{
+  ASSERT(myHomardCas );
+  HOMARD::extrema_var aResult = new HOMARD::extrema();
+  std::vector<double> LesExtremes = myHomardCas->GetBoundingBox();
+  ASSERT( LesExtremes.size() == 10 );
+  aResult->length( 10 );
+  for ( int i = 0; i < LesExtremes.size(); i++ )
+  {
+    aResult[i] = LesExtremes[i];
+  }
+  return aResult._retn();
+}
+//=============================================================================
 void HOMARD_Cas_i::AddGroup( const char* Group)
 {
   ASSERT( myHomardCas );
@@ -183,7 +301,6 @@ void HOMARD_Cas_i::SetGroups( const HOMARD::ListGroupType& ListGroup )
   {
     ListString.push_back(std::string(ListGroup[i]));
   }
-
   myHomardCas->SetGroups( ListString );
 }
 //=============================================================================
@@ -201,31 +318,71 @@ HOMARD::ListGroupType* HOMARD_Cas_i::GetGroups()
   }
   return aResult._retn();
 }
-
 //=============================================================================
-void HOMARD_Cas_i::AddBoundaryGroup( const char* Boundary, const char* Group)
+void HOMARD_Cas_i::AddBoundaryGroup( const char* BoundaryName, const char* Group)
 {
-  MESSAGE ("AddBoundaryGroup");
+  MESSAGE ("AddBoundaryGroup : BoundaryName = "<< BoundaryName << ", Group = " << Group );
   ASSERT( myHomardCas );
-  myHomardCas->AddBoundaryGroup( Boundary, Group );
+  // A. La liste des frontiere+groupes
+  const std::list<std::string>& ListBoundaryGroup = myHomardCas->GetBoundaryGroup();
+  std::list<std::string>::const_iterator it;
+  // B. La frontiere
+  // B.1. La frontiere est-elle deja enregistree pour ce cas ?
+  bool existe = false ;
+  for ( it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++ )
+  {
+//     MESSAGE ("..  Frontiere : "<< *it );
+    if ( *it == BoundaryName ) { existe = true ; }
+    it++ ;
+  }
+  // B.2. Pour une nouvelle frontiere, publication dans l'arbre d'etudes sous le cas
+  if ( !existe )
+  {
+    char* CaseName = GetName() ;
+    MESSAGE ( "AddBoundaryGroup : insertion de la frontiere dans l'arbre de " << CaseName );
+    _gen_i->PublishBoundaryUnderCase(CaseName, BoundaryName) ;
+  }
+  // C. Le groupe est-il deja enregistre pour une frontiere de ce cas ?
+  for ( it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++ )
+  {
+    std::string boun = *it ;
+    it++ ;
+//     MESSAGE ("..  Group : "<< *it );
+    if ( *it == Group )
+    { INFOS ("Frontiere " << boun << " Un groupe est deja associe " << Group ) ;
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid AddBoundaryGroup";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+    }
+  }
+  // D. Enregistrement du couple (frontiere,groupe) dans la reference du cas
+  myHomardCas->AddBoundaryGroup( BoundaryName, Group );
 }
 //=============================================================================
 HOMARD::ListBoundaryGroupType* HOMARD_Cas_i::GetBoundaryGroup()
 {
   MESSAGE ("GetBoundaryGroup");
   ASSERT(myHomardCas );
-  const std::list<std::string>& ListString = myHomardCas->GetBoundaryGroup();
+  const std::list<std::string>& ListBoundaryGroup = myHomardCas->GetBoundaryGroup();
   HOMARD::ListBoundaryGroupType_var aResult = new HOMARD::ListBoundaryGroupType();
-  aResult->length( ListString.size() );
+  aResult->length( ListBoundaryGroup.size() );
   std::list<std::string>::const_iterator it;
   int i = 0;
-  for ( it = ListString.begin(); it != ListString.end(); it++ )
+  for ( it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++ )
   {
     aResult[i++] = CORBA::string_dup( (*it).c_str() );
   }
   return aResult._retn();
 }
-
+//=============================================================================
+void HOMARD_Cas_i::SupprBoundaryGroup()
+{
+  MESSAGE ("SupprBoundaryGroup");
+  ASSERT(myHomardCas );
+  myHomardCas->SupprBoundaryGroup();
+}
 //=============================================================================
 void HOMARD_Cas_i::SetPyram( CORBA::Long Pyram )
 {
@@ -241,13 +398,108 @@ CORBA::Long HOMARD_Cas_i::GetPyram()
   return myHomardCas->GetPyram();
 }
 //=============================================================================
-std::string HOMARD_Cas_i::Dump() const
+void HOMARD_Cas_i::MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte)
 {
-  return HOMARD::Dump( *myHomardCas );
+  MESSAGE ( "MeshInfo : information sur le maillage initial du cas" );
+  ASSERT( myHomardCas );
+//
+// Nom de l'iteration
+  char* IterName = GetIter0Name() ;
+  CORBA::Long etatMenage = -1 ;
+  CORBA::Long modeHOMARD = 7 ;
+  CORBA::Long Option1 = 1 ;
+  CORBA::Long Option2 = 1 ;
+  if ( Qual != 0 ) { modeHOMARD = modeHOMARD*5 ; }
+  if ( Diam != 0 ) { modeHOMARD = modeHOMARD*19 ; }
+  if ( Conn != 0 ) { modeHOMARD = modeHOMARD*11 ; }
+  if ( Tail != 0 ) { modeHOMARD = modeHOMARD*13 ; }
+  if ( Inte != 0 ) { modeHOMARD = modeHOMARD*3 ; }
+  CORBA::Long codret = _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option1, Option2) ;
+  MESSAGE ( "MeshInfo : codret = " << codret );
+  return ;
 }
-
 //=============================================================================
-bool HOMARD_Cas_i::Restore( const std::string& stream )
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+char* HOMARD_Cas_i::GetIter0Name()
 {
-  return HOMARD::Restore( *myHomardCas, stream );
+  ASSERT( myHomardCas );
+  return CORBA::string_dup( myHomardCas->GetIter0Name().c_str() );
+}
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Cas_i::GetIter0()
+{
+// Nom de l'iteration initiale
+  char* Iter0Name = GetIter0Name() ;
+  MESSAGE ( "GetIter0 : Iter0Name      = " << Iter0Name );
+  return _gen_i->GetIteration(Iter0Name) ;
+}
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Cas_i::NextIteration( const char* IterName )
+{
+// Nom de l'iteration parent
+  char* NomIterParent = GetIter0Name() ;
+  MESSAGE ( "NextIteration : IterName      = " << IterName );
+  MESSAGE ( "NextIteration : NomIterParent = " << NomIterParent );
+  return _gen_i->CreateIteration(IterName, NomIterParent) ;
+}
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Cas_i::LastIteration( )
+{
+  HOMARD::HOMARD_Iteration_ptr Iter ;
+  HOMARD::listeIterFilles_var ListeIterFilles ;
+  char* IterName ;
+// Iteration initiale du cas
+  IterName = GetIter0Name() ;
+// On va explorer la descendance de cette iteration initiale
+// jusqu'a trouver celle qui n'a pas de filles
+  int nbiterfilles = 1 ;
+  while ( nbiterfilles == 1 )
+  {
+// L'iteration associee
+//     MESSAGE ( ".. IterName = " << IterName );
+    Iter = _gen_i->GetIteration(IterName) ;
+// Les filles de cette iteration
+    ListeIterFilles = Iter->GetIterations() ;
+    nbiterfilles = ListeIterFilles->length() ;
+//     MESSAGE ( ".. nbiterfilles = " << nbiterfilles );
+// S'il y a au moins 2 filles, arret : on ne sait pas faire
+    VERIFICATION( nbiterfilles <= 1 ) ;
+// S'il y a une fille unique, on recupere le nom de la fille et on recommence
+    if ( nbiterfilles == 1 )
+    { IterName = ListeIterFilles[0] ; }
+  }
+//
+  return Iter ;
+}
+//=============================================================================
+void HOMARD_Cas_i::AddIteration( const char* NomIteration )
+{
+  ASSERT( myHomardCas );
+  myHomardCas->AddIteration( NomIteration );
+}
+//=============================================================================
+//=============================================================================
+// YACS
+//=============================================================================
+//=============================================================================
+//=============================================================================
+// Creation d'un schema YACS
+// YACSName : nom du schema
+// ScriptFile : nom du fichier contenant le script de lancement du calcul
+// DirName : le repertoire de lancement des calculs du sch?ma
+// MeshFile : nom du fichier contenant le maillage pour le premier calcul
+//=============================================================================
+HOMARD::HOMARD_YACS_ptr HOMARD_Cas_i::CreateYACSSchema( const char* YACSName, const char* ScriptFile, const char* DirName, const char* MeshFile )
+{
+// Nom du cas
+  const char* CaseName = GetName() ;
+  MESSAGE ( "CreateYACSSchema : Schema YACS pour le cas " << YACSName);
+  MESSAGE ( "nomCas     : " << CaseName);
+  MESSAGE ( "ScriptFile : " << ScriptFile);
+  MESSAGE ( "DirName    : " << DirName);
+  MESSAGE ( "MeshFile   : " << MeshFile);
+  return _gen_i->CreateYACSSchema(YACSName, CaseName, ScriptFile, DirName, MeshFile) ;
 }
index 3c7a2007a844da9bdb57baf0fa190c5c8c1aacb4..14a25ac685be92f971745fe409ca35eea95f445f 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_CAS_I_HXX_
 #define _HOMARD_CAS_I_HXX_
 
@@ -24,6 +34,7 @@
 #include CORBA_SERVER_HEADER(HOMARD_Gen)
 #include CORBA_SERVER_HEADER(HOMARD_Cas)
 
+#include "HOMARD_i.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -32,7 +43,7 @@
 
 class HOMARD_Cas;
 
-class HOMARD_Cas_i:
+class HOMARDENGINE_EXPORT HOMARD_Cas_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Cas,
   public virtual PortableServer::ServantBase
@@ -43,36 +54,59 @@ public:
 
   virtual ~HOMARD_Cas_i();
 
+// Generalites
+  void                   SetName( const char* Name );
+  char*                  GetName();
+
+  CORBA::Long            Delete( CORBA::Long Option );
+
+  char*                  GetDumpPython();
+
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
+
+// Caracteristiques
   void                   SetDirName( const char* NomDir );
   char*                  GetDirName();
 
-  void                   SetName( const char* NomCas );
-  char*                  GetName();
+  CORBA::Long            GetState();
+
+  CORBA::Long            GetNumberofIter();
 
   void                   SetConfType( CORBA::Long ConfType );
   CORBA::Long            GetConfType();
 
-  void                   AddIteration( const char* NomIteration );
-  char*                  GetIter0Name();
+  void                   SetExtType( CORBA::Long ExtType );
+  CORBA::Long            GetExtType();
 
-  HOMARD::extrema*       GetBoundingBox();
   void                   SetBoundingBox( const HOMARD::extrema& LesExtremes );
+  HOMARD::extrema*       GetBoundingBox();
 
-  HOMARD::ListGroupType* GetGroups();
   void                   AddGroup( const char* Group);
   void                   SetGroups(const HOMARD::ListGroupType& ListGroup);
+  HOMARD::ListGroupType* GetGroups();
 
-  HOMARD::ListBoundaryGroupType*  GetBoundaryGroup();
   void                   AddBoundaryGroup( const char* Boundary, const char* Group);
+  HOMARD::ListBoundaryGroupType*  GetBoundaryGroup();
+  void                   SupprBoundaryGroup( );
 
   void                   SetPyram( CORBA::Long Pyram );
   CORBA::Long            GetPyram();
 
-  std::string            Dump() const;
-  bool                   Restore( const std::string& stream );
+  void                   MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte);
+
+// Liens avec les autres structures
+  char*                  GetIter0Name();
+  HOMARD::HOMARD_Iteration_ptr GetIter0() ;
+
+  HOMARD::HOMARD_Iteration_ptr  NextIteration( const char* Name ) ;
+
+  HOMARD::HOMARD_Iteration_ptr  LastIteration() ;
+
+  void                   AddIteration( const char* NomIteration );
 
-  char *                GetDumpPython();
-  CORBA::Long            GetNumber();
+// YACS
+  HOMARD::HOMARD_YACS_ptr CreateYACSSchema( const char* YACSName, const char* ScriptFile, const char* DirName, const char* MeshFile );
 
 private:
   ::HOMARD_Cas*          myHomardCas;
old mode 100755 (executable)
new mode 100644 (file)
index 9415aa6..5b5dacc
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include "HOMARD_Iteration_i.hxx"
 #include "HOMARD_Boundary_i.hxx"
 #include "HOMARD_Zone_i.hxx"
+#include "HOMARD_YACS_i.hxx"
 #include "HomardDriver.hxx"
 #include "HOMARD_DriverTools.hxx"
 #include "HomardMedCommun.h"
+#include "YACSDriver.hxx"
+#include "HOMARD.hxx"
+
+#include "HOMARD_version.h"
 
 #include "utilities.h"
 #include "Utils_SINGLETON.hxx"
 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 #include CORBA_CLIENT_HEADER(SMESH_Gen)
 
+#include <cmath>
 #include <stdlib.h>
 #include <sys/stat.h>
+#ifndef WIN32
 #include <dirent.h>
+#endif
 #include <string>
+#include <cstring>
 #include <iostream>
+#include <fstream>
 #include <iomanip>
-#include <sys/stat.h>
 #include <set>
 #include <vector>
 #include <stdio.h>
 
+#ifdef WIN32
+#include <direct.h>
+#endif
 
 using  namespace std;
 
-//=======================================================================
-//function : RemoveTabulation
-//purpose  :
-//=======================================================================
+//=============================================================================
+//functions
+//=============================================================================
 std::string RemoveTabulation( std::string theScript )
 {
   std::string::size_type aPos = 0;
@@ -67,7 +78,6 @@ std::string RemoveTabulation( std::string theScript )
   }
   return theScript;
 }
-
 //=============================================================================
 /*!
  *  standard constructor
@@ -88,8 +98,15 @@ Engines_Component_i(orb, poa, contId, instanceName, interfaceName)
   _NS = SINGLETON_<SALOME_NamingService>::Instance();
   ASSERT(SINGLETON_<SALOME_NamingService>::IsAlreadyExisting());
   _NS->init_orb(_orb);
-}
 
+  _tag_gene = 0 ;
+  _tag_boun = 0 ;
+  _tag_hypo = 0 ;
+  _tag_yacs = 0 ;
+  _tag_zone = 0 ;
+
+  SetPreferences( ) ;
+}
 //=================================
 /*!
  *  standard destructor
@@ -99,9 +116,9 @@ HOMARD_Gen_i::~HOMARD_Gen_i()
 {
 }
 //=============================================================================
-/*!
- *  Ajoute le composant homard dans l etude si necessaire
- */
+//=============================================================================
+// Utilitaires pour l'étude
+//=============================================================================
 //=============================================================================
 void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy)
 {
@@ -140,12 +157,6 @@ void HOMARD_Gen_i::addInStudy(SALOMEDS::Study_ptr theStudy)
     myBuilder->CommitCommand();
   }
 }
-
-//=============================================================================
-/*!
- *
- *  Set current study
- */
 //=============================================================================
 void HOMARD_Gen_i::SetCurrentStudy(SALOMEDS::Study_ptr theStudy)
 {
@@ -153,7 +164,6 @@ void HOMARD_Gen_i::SetCurrentStudy(SALOMEDS::Study_ptr theStudy)
   myCurrentStudy = SALOMEDS::Study::_duplicate(theStudy);
   this->addInStudy(myCurrentStudy);
 }
-
 //=============================================================================
 SALOMEDS::Study_ptr HOMARD_Gen_i::GetCurrentStudy()
 //=============================================================================
@@ -161,154 +171,398 @@ SALOMEDS::Study_ptr HOMARD_Gen_i::GetCurrentStudy()
   MESSAGE("GetCurrentStudy: study Id = " << GetCurrentStudyID());
   return SALOMEDS::Study::_duplicate(myCurrentStudy);
 }
-
 //=============================================================================
 CORBA::Long HOMARD_Gen_i::GetCurrentStudyID()
 //=============================================================================
 {
   return myCurrentStudy->_is_nil() ? -1 : myCurrentStudy->StudyId();
 }
+//=============================================================================
+//=============================================================================
 
 //=============================================================================
-void HOMARD_Gen_i::AssociateCaseIter(const char* nomCas, const char* nomIter, const char* labelIter)
+//=============================================================================
+// Utilitaires pour l'iteration
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::SetEtatIter(const char* nomIter, const CORBA::Long Etat)
+//=====================================================================================
 {
-  MESSAGE( "AssociateCaseIter : " << nomCas << " ," << nomIter << ","  << labelIter );
-  IsValidStudy () ;
-
-  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
-  if (CORBA::is_nil(myCase))
+  MESSAGE( "SetEtatIter : affectation de l'etat " << Etat << " a l'iteration " << nomIter );
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
+  if (CORBA::is_nil(myIteration))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case ";
+      es.text = "Invalid iteration";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
 
-  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
-  if (CORBA::is_nil(myIteration))
+  myIteration->SetState(Etat);
+
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
+
+  std::string icone ;
+  if ( Etat <= 0 )
+    icone = "iter0.png" ;
+  else if ( Etat == 2 )
+    icone = "iter_calculee.png" ;
+  else
+    icone = "iter_non_calculee.png" ;
+  PublishInStudyAttr(aStudyBuilder, aIterSO, NULL , NULL, icone.c_str(), NULL) ;
+
+  aStudyBuilder->CommitCommand();
+
+}
+//=============================================================================
+//=============================================================================
+//
+//=============================================================================
+//=============================================================================
+// Destruction des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteBoundary(const char* BoundaryName)
+{
+  MESSAGE ( "DeleteBoundary : BoundaryName = " << BoundaryName );
+  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
+  if (CORBA::is_nil(myBoundary))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid boundary";
+    throw SALOME::SALOME_Exception(es);
+    return 1 ;
   };
 
+// On verifie que la frontiere n'est plus utilisee
+  HOMARD::listeCases* maListe = GetAllCasesName();
+  int numberOfCases = maListe->length();
+  MESSAGE ( ".. Nombre de cas = " << numberOfCases );
+  std::string CaseName ;
+  HOMARD::ListBoundaryGroupType* ListBoundaryGroupType ;
+  int numberOfitems ;
+  HOMARD::HOMARD_Cas_var myCase ;
+  for (int NumeCas = 0; NumeCas< numberOfCases; NumeCas++)
+  {
+    CaseName = std::string((*maListe)[NumeCas]);
+    MESSAGE ( "... Examen du cas = " << CaseName.c_str() );
+    myCase = myContextMap[GetCurrentStudyID()]._mesCas[CaseName];
+    ASSERT(!CORBA::is_nil(myCase));
+    ListBoundaryGroupType = myCase->GetBoundaryGroup();
+    numberOfitems = ListBoundaryGroupType->length();
+    MESSAGE ( "... number of string for Boundary+Group = " << numberOfitems);
+    for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
+    {
+      if ( std::string((*ListBoundaryGroupType)[NumBoundary]) == BoundaryName )
+      {
+        SALOME::ExceptionStruct es;
+        es.type = SALOME::BAD_PARAM;
+        es.text = "This boundary is used in a case and cannot be deleted.";
+        throw SALOME::SALOME_Exception(es);
+        return 2 ;
+      };
+    };
+  }
+
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesBoundarys.erase(BoundaryName);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(BoundaryName, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
   SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
-  SALOMEDS::SObject_var aCasSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myCase)));
-  if (CORBA::is_nil(aCasSO))
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
+
+  return 0 ;
+}
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteCase(const char* nomCas, CORBA::Long Option)
+{
+  // Pour detruire un cas
+  MESSAGE ( "DeleteCase : nomCas = " << nomCas << ", avec option = " << Option );
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  if (CORBA::is_nil(myCase))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case context";
+    throw SALOME::SALOME_Exception(es);
+    return 1;
+  };
+  // On commence par detruire toutes les iterations en partant de l'initiale et y compris elle
+  CORBA::String_var nomIter = myCase->GetIter0Name();
+  CORBA::Long Option1 = 0 ;
+  if ( DeleteIterationOption(nomIter, Option1, Option) != 0 )
+  {
+    return 2;
   };
 
-  aStudyBuilder->NewCommand();
-  SALOMEDS::SObject_var newStudyIter = aStudyBuilder->NewObject(aCasSO);
-  PublishInStudyAttr(aStudyBuilder, newStudyIter, nomIter , labelIter,
-                     "iter_non_calculee.png", _orb->object_to_string(myIteration)) ;
-  aStudyBuilder->CommitCommand();
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesCas.erase(nomCas);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomCas, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
 
-  myCase->AddIteration(nomIter);
-  myIteration->SetCaseName(nomCas);
+  return 0 ;
 }
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteHypo(const char* nomHypo)
+{
+  MESSAGE ( "DeleteHypo : nomHypo = " << nomHypo );
+  HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
+  if (CORBA::is_nil(myHypo))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid hypothesis";
+    throw SALOME::SALOME_Exception(es);
+    return 1 ;
+  };
 
-//=====================================================================================
-void HOMARD_Gen_i::SetEtatIter(const char* nomIter, const CORBA::Boolean EtatCalcul)
-//=====================================================================================
+// On verifie que l'hypothese n'est plus utilisee
+  HOMARD::listeIters* maListeIter = myHypo->GetIterations();
+  int numberOfIter = maListeIter->length();
+  if ( numberOfIter > 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This hypothesis is used in an iteration and cannot be deleted.";
+    throw SALOME::SALOME_Exception(es);
+    return 2 ;
+  };
+
+  // suppression du lien avec les zones eventuelles
+  HOMARD::listeZonesHypo* maListe = myHypo->GetZones();
+  int numberOfZones = maListe->length();
+  MESSAGE ( ".. Nombre de zones = " << numberOfZones );
+  for (int NumeZone = 0; NumeZone< numberOfZones; NumeZone++)
+  {
+    std::string ZoneName = std::string((*maListe)[NumeZone]);
+    MESSAGE ( ".. suppression du lien avec la zone = " << ZoneName.c_str() );
+    DissociateHypoZone(nomHypo, ZoneName.c_str()) ;
+    NumeZone += 1 ;
+  }
+
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesHypotheses.erase(nomHypo);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomHypo, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
+
+  return 0 ;
+}
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteIteration(const char* nomIter, CORBA::Long Option)
+{
+  //  Option = 0 : On ne supprime pas le fichier du maillage associe
+  //  Option = 1 : On supprime le fichier du maillage associe
+  // Pour detruire une iteration courante
+  MESSAGE ( "DeleteIteration : nomIter = " << nomIter << ", avec option = " << Option );
+  CORBA::Long Option1 = 1 ;
+  return DeleteIterationOption(nomIter, Option1, Option);
+}
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteIterationOption(const char* nomIter, CORBA::Long Option1, CORBA::Long Option2)
 {
-  MESSAGE( "SetEtatIter : nomIter  = " << nomIter << " etat " << EtatCalcul );
+  //  Option1 = 0 : On autorise la destruction de l'iteration 0
+  //  Option1 = 1 : On interdit la destruction de l'iteration 0
+
+  //  Option2 = 0 : On ne supprime pas le fichier du maillage associe
+  //  Option2 = 1 : On supprime le fichier du maillage associe
+  MESSAGE ( "DeleteIterationOption : nomIter = " << nomIter << ", avec options = " << Option1<< ", " << Option2 );
   HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
   if (CORBA::is_nil(myIteration))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Iteration ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid iteration";
+    throw SALOME::SALOME_Exception(es);
+    return 1 ;
   };
 
-  myIteration->SetEtat(EtatCalcul);
+  int numero = myIteration->GetNumber();
+  MESSAGE ( "DeleteIterationOption : numero = " << numero );
+  if ( numero == 0 && Option1 == 1 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This iteration cannot be deleted.";
+    throw SALOME::SALOME_Exception(es);
+    return 2 ;
+  };
 
-  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
-  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
-  if (CORBA::is_nil(myIteration))
+  // On detruit recursivement toutes les filles
+  HOMARD::listeIterFilles* maListe = myIteration->GetIterations();
+  int numberOfIter = maListe->length();
+  for (int NumeIter = 0; NumeIter< numberOfIter; NumeIter++)
+  {
+    std::string nomIterFille = std::string((*maListe)[NumeIter]);
+    MESSAGE ( ".. appel recursif de DeleteIterationOption pour nomIter = " << nomIterFille.c_str() );
+    DeleteIterationOption(nomIterFille.c_str(), Option1, Option2);
+  }
+
+  // On arrive ici pour une iteration sans fille
+  MESSAGE ( "Destruction effective de " << nomIter );
+  // On commence par invalider l'iteration pour faire le menage des dependances
+  // et eventuellement du maillage associe
+  int option ;
+  if ( numero == 0 ) { option = 0 ; }
+  else               { option = Option2 ; }
+  InvalideIterOption(nomIter, option) ;
+
+  // Retrait dans la descendance de l'iteration parent
+  if ( numero > 0 )
   {
+    std::string nomIterationParent = myIteration->GetIterParentName();
+    MESSAGE ( "Retrait dans la descendance de nomIterationParent " << nomIterationParent );
+    HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterationParent];
+    if (CORBA::is_nil(myIterationParent))
+    {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Iteration ";
+      es.text = "Invalid iteration";
       throw SALOME::SALOME_Exception(es);
-      return ;
-  };
-
-  int number = myIteration->GetNumber() ;
-  const char* icone ;
-  if ( number == 0 )
-    icone = "iter0.png" ;
-  else if (EtatCalcul)
-    icone = "iter_calculee.png" ;
-  else
-    icone = "iter_non_calculee.png" ;
-  PublishInStudyAttr(aStudyBuilder, aIterSO, NULL , NULL, icone, NULL) ;
+      return 3 ;
+    };
+    myIterationParent->UnLinkNextIteration(nomIter);
+  }
 
-  aStudyBuilder->CommitCommand();
+  // suppression du lien avec l'hypothese
+  if ( numero > 0 )
+  {
+    std::string nomHypo = myIteration->GetHypoName();
+    HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
+    ASSERT(!CORBA::is_nil(myHypo));
+    myHypo->UnLinkIteration(nomIter);
+  }
 
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesIterations.erase(nomIter);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomIter, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
+  // on peut aussi faire RemoveObject
+//   MESSAGE ( "Au final" );
+//   HOMARD::listeIterations* Liste = GetAllIterationsName() ;
+//   numberOfIter = Liste->length();
+//   for (int NumeIter = 0; NumeIter< numberOfIter; NumeIter++)
+//   {
+//       std::string nomIterFille = std::string((*Liste)[NumeIter]);
+//       MESSAGE ( ".. nomIter = " << nomIterFille.c_str() );
+//   }
+
+  return 0 ;
 }
-//=====================================================================================
-void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName)
-//=====================================================================================
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteYACS(const char* nomYACS, CORBA::Long Option)
 {
-  MESSAGE( "InvalideBoundary : BoundaryName    = " << BoundaryName  );
-  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
-  if (CORBA::is_nil(myBoundary))
+  //  Option = 0 : On ne supprime pas le fichier du schema associe
+  //  Option = 1 : On supprime le fichier du schema associe
+  MESSAGE ( "DeleteYACS : nomYACS = " << nomYACS << ", avec option = " << Option );
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+  if (CORBA::is_nil(myYACS))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid schema YACS";
+    throw SALOME::SALOME_Exception(es);
+    return 1 ;
+  };
+  // Suppression eventuelle du fichier XML
+  if ( Option == 1 )
   {
+    std::string nomFichier = myYACS->GetXMLFile();
+    std::string commande = "rm -rf " + nomFichier ;
+    MESSAGE ( "commande = " << commande );
+    if ((system(commande.c_str())) != 0)
+    {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Boundary ";
+      es.text = "The xml file for the schema YACS cannot be removed." ;
       throw SALOME::SALOME_Exception(es);
-      return ;
-  };
-  SALOME::ExceptionStruct es;
-  es.type = SALOME::BAD_PARAM;
-  es.text = "No change is allowed in boundary. Ask for evolution.";
-  throw SALOME::SALOME_Exception(es);
-  return ;
-/*  HOMARD::listeHypo* maListe = myBoundary->GetHypo();
-  int numberOfHypo = maListe->length();
-  for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++)
-  {
-      std::string nomHypo = std::string((*maListe)[NumeHypo]);
-      InvalideHypo(nomHypo.c_str());
-  }*/
+      return 2 ;
+    }
+  }
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesYACSs.erase(nomYACS);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomYACS, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
+
+  return 0 ;
 }
-//=====================================================================================
-void HOMARD_Gen_i::InvalideZone(const char* ZoneName)
-//=====================================================================================
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteZone(const char* nomZone)
 {
-  MESSAGE( "InvalideZone : ZoneName    = " << ZoneName  );
-  HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
+  MESSAGE ( "DeleteZone : nomZone = " << nomZone );
+  HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[nomZone];
   if (CORBA::is_nil(myZone))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Zone ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid zone";
+    throw SALOME::SALOME_Exception(es);
+    return 1 ;
   };
+
+// On verifie que la zone n'est plus utilisee
   HOMARD::listeHypo* maListe = myZone->GetHypo();
   int numberOfHypo = maListe->length();
-  for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++)
+  MESSAGE ( ".. Nombre d'hypotheses = " << numberOfHypo );
+  if ( numberOfHypo > 0 )
   {
-      std::string nomHypo = std::string((*maListe)[NumeHypo]);
-      InvalideHypo(nomHypo.c_str());
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This zone is used in an hypothesis and cannot be deleted.";
+    throw SALOME::SALOME_Exception(es);
+    return 2 ;
+  };
+//
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  myContextMap[GetCurrentStudyID()]._mesZones.erase(nomZone);
+  SALOMEDS::Study::ListOfSObject_var listSO = myCurrentStudy->FindObjectByName(nomZone, ComponentDataType());
+  SALOMEDS::SObject_var aSO =listSO[0];
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren(aSO);
+
+  return 0 ;
+}
+//=============================================================================
+//=============================================================================
+//
+//=============================================================================
+//=============================================================================
+// Invalidation des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName)
+{
+  MESSAGE( "InvalideBoundary : BoundaryName = " << BoundaryName  );
+  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
+  if (CORBA::is_nil(myBoundary))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid boundary";
+    throw SALOME::SALOME_Exception(es);
+    return ;
   }
+  else
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "No change is allowed in a boundary. Ask for evolution.";
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  };
 }
-//=====================================================================================
+//=============================================================================
 void HOMARD_Gen_i::InvalideHypo(const char* nomHypo)
-//=====================================================================================
 {
   MESSAGE( "InvalideHypo : nomHypo    = " << nomHypo  );
   HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
@@ -316,7 +570,7 @@ void HOMARD_Gen_i::InvalideHypo(const char* nomHypo)
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Hypothesis ";
+      es.text = "Invalid hypothesis";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
@@ -326,22 +580,30 @@ void HOMARD_Gen_i::InvalideHypo(const char* nomHypo)
   for (int NumeIter = 0; NumeIter< numberOfIter; NumeIter++)
   {
       std::string nomIter = std::string((*maListe)[NumeIter]);
+      MESSAGE( ".. nomIter = " << nomIter );
       InvalideIter(nomIter.c_str());
   }
 }
-//
-//=====================================================================================
+//=============================================================================
 void HOMARD_Gen_i::InvalideIter(const char* nomIter)
-//=====================================================================================
 {
-  MESSAGE("InvalideIter : nomIter    = " << nomIter);
-  SetEtatIter(nomIter,false);
+  MESSAGE("InvalideIter : nomIter = " << nomIter);
+  // Pour invalider totalement une iteration courante
+  CORBA::Long Option = 1 ;
+  return InvalideIterOption(nomIter, Option);
+}
+//=============================================================================
+void HOMARD_Gen_i::InvalideIterOption(const char* nomIter, CORBA::Long Option)
+{
+  //  Option = 0 : On ne supprime pas le fichier du maillage associe
+  //  Option = 1 : On supprime le fichier du maillage associe
+  MESSAGE ( "InvalideIterOption : nomIter = " << nomIter << ", avec option = " << Option );
   HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
   if (CORBA::is_nil(myIteration))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Iteration ";
+      es.text = "Invalid iteration";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
@@ -351,9 +613,12 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter)
   for (int NumeIter = 0; NumeIter< numberOfIter; NumeIter++)
   {
       std::string nomIterFille = std::string((*maListe)[NumeIter]);
+      MESSAGE ( ".. appel recursif de InvalideIter pour nomIter = " << nomIterFille.c_str() );
       InvalideIter(nomIterFille.c_str());
   }
 
+  // On arrive ici pour une iteration sans fille
+  MESSAGE ( "Invalidation effective de " << nomIter );
   SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
   SALOMEDS::ChildIterator_var  aIter = myCurrentStudy->NewChildIterator(aIterSO);
   for (; aIter->More(); aIter->Next())
@@ -363,43 +628,219 @@ void HOMARD_Gen_i::InvalideIter(const char* nomIter)
       if (!so->FindAttribute(anAttr, "AttributeComment")) continue;
       SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr);
       std::string value (aCommentAttr->Value());
+      if(value == std::string("IterationHomard")) continue;
       if(value == std::string("HypoHomard")) continue;
       SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
       aStudyBuilder->RemoveObject(so);
   }
-  const char * nomCas = myIteration->GetCaseName();
-  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
-  if (CORBA::is_nil(myCase))
+
+  int etat = myIteration->GetState();
+  if ( etat > 0 )
   {
+    SetEtatIter(nomIter,1);
+    const char * nomCas = myIteration->GetCaseName();
+    HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+    if (CORBA::is_nil(myCase))
+    {
+        SALOME::ExceptionStruct es;
+        es.type = SALOME::BAD_PARAM;
+        es.text = "Invalid case context";
+        throw SALOME::SALOME_Exception(es);
+        return ;
+    };
+    std::string nomDir     = myIteration->GetDirName();
+    std::string nomFichier = myIteration->GetMeshFile();
+    std::string commande = "rm -rf " + std::string(nomDir);
+    if ( Option == 1 ) { commande = commande + ";rm -rf " + std::string(nomFichier) ; }
+    MESSAGE ( "commande = " << commande );
+    if ((system(commande.c_str())) != 0)
+    {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case Context ";
+      es.text = "The directory for the calculation cannot be cleared." ;
       throw SALOME::SALOME_Exception(es);
       return ;
+    }
+  // Suppression du maillage publie dans SMESH
+    std::string MeshName = myIteration->GetMeshName() ;
+    DeleteResultInSmesh(nomFichier, MeshName) ;
   };
-  const char* dirParent  = myCase->GetDirName();
-  const char* nomDir     = myIteration->GetDirName();
-  const char* nomFichier = myIteration->GetMeshFile();
-  std::string commande= "rm -rf " + std::string(dirParent) + "/" + std::string(nomDir);
-  commande = commande + ";rm -rf " + std::string(nomFichier);
-  if ((system(commande.c_str())) != 0)
-  {
-        SALOME::ExceptionStruct es;
-        es.type = SALOME::BAD_PARAM;
-        es.text = "Menage du repertoire de calcul impossible" ;
-        throw SALOME::SALOME_Exception(es);
-        return ;
+
+}
+//=============================================================================
+void HOMARD_Gen_i::InvalideIterInfo(const char* nomIter)
+{
+  MESSAGE("InvalideIterInfo : nomIter = " << nomIter);
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
+  if (CORBA::is_nil(myIteration))
+  {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid iteration";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+  };
+
+  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
+  SALOMEDS::ChildIterator_var  aIter = myCurrentStudy->NewChildIterator(aIterSO);
+  for (; aIter->More(); aIter->Next())
+  {
+      SALOMEDS::SObject_var so = aIter->Value();
+      SALOMEDS::GenericAttribute_var anAttr;
+      if (!so->FindAttribute(anAttr, "AttributeComment")) continue;
+      SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr);
+      std::string value (aCommentAttr->Value());
+/*      MESSAGE("... value = " << value);*/
+      if( (value == std::string("logInfo")) || ( value == std::string("SummaryInfo")) )
+      {
+        SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+        aStudyBuilder->RemoveObject(so);
+      }
+  }
+
+  const char * nomCas = myIteration->GetCaseName();
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  if (CORBA::is_nil(myCase))
+  {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid case context";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+  };
+  const char* nomDir   = myIteration->GetDirName();
+  std::string commande = "rm -f " + std::string(nomDir) + "/info* " ;
+  commande += std::string(nomDir) + "/Liste.*info" ;
+/*  MESSAGE ( "commande = " << commande );*/
+  if ((system(commande.c_str())) != 0)
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory for the calculation cannot be cleared." ;
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  }
+}
+//=============================================================================
+void HOMARD_Gen_i::InvalideYACS(const char* YACSName)
+{
+  MESSAGE( "InvalideYACS : YACSName    = " << YACSName );
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[YACSName];
+  if (CORBA::is_nil(myYACS))
+  {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid schema YACS";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+  };
+  //
+  SALOMEDS::SObject_var aYACSSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myYACS)));
+  SALOMEDS::ChildIterator_var  aYACS = myCurrentStudy->NewChildIterator(aYACSSO);
+  for (; aYACS->More(); aYACS->Next())
+  {
+    SALOMEDS::SObject_var so = aYACS->Value();
+    SALOMEDS::GenericAttribute_var anAttr;
+    if (!so->FindAttribute(anAttr, "AttributeComment")) continue;
+    SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr);
+    std::string value (aCommentAttr->Value());
+    if( value == std::string("xml") )
+    {
+      SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+      aStudyBuilder->RemoveObject(so);
+    }
+  }
+  std::string nomFichier = myYACS->GetXMLFile();
+  std::string commande = "rm -rf " + std::string(nomFichier) ;
+  MESSAGE ( "commande = " << commande );
+  if ((system(commande.c_str())) != 0)
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The XML file for the schema YACS cannot be removed." ;
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  }
+}
+//=============================================================================
+void HOMARD_Gen_i::InvalideZone(const char* ZoneName)
+{
+  MESSAGE( "InvalideZone : ZoneName    = " << ZoneName );
+  HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
+  if (CORBA::is_nil(myZone))
+  {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid zone";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+  };
+  HOMARD::listeHypo* maListe = myZone->GetHypo();
+  int numberOfHypo = maListe->length();
+  MESSAGE( ".. numberOfHypo = " << numberOfHypo );
+  for (int NumeHypo = 0; NumeHypo< numberOfHypo; NumeHypo++)
+  {
+      std::string nomHypo = std::string((*maListe)[NumeHypo]);
+      MESSAGE( ".. nomHypo = " << nomHypo );
+      InvalideHypo(nomHypo.c_str());
   }
-// Suppression du maillage publie dans SMESH
-  const char* MeshName = myIteration->GetMeshName();
-  DeleteResultInSmesh(nomFichier, MeshName) ;
 }
+//=============================================================================
+//=============================================================================
 //
+//=============================================================================
+//=============================================================================
+// Association de lien entre des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::AssociateCaseIter(const char* nomCas, const char* nomIter, const char* labelIter)
+{
+  MESSAGE( "AssociateCaseIter : " << nomCas << ", " << nomIter << ", "  << labelIter );
+
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  if (CORBA::is_nil(myCase))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case";
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  };
+
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
+  if (CORBA::is_nil(myIteration))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid iteration";
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  };
+
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  SALOMEDS::SObject_var aCasSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myCase)));
+  if (CORBA::is_nil(aCasSO))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case";
+    throw SALOME::SALOME_Exception(es);
+    return ;
+  };
+
+  aStudyBuilder->NewCommand();
+  SALOMEDS::SObject_var newStudyIter = aStudyBuilder->NewObject(aCasSO);
+  PublishInStudyAttr(aStudyBuilder, newStudyIter, nomIter , labelIter,
+                     "iter_non_calculee.png", _orb->object_to_string(myIteration)) ;
+  aStudyBuilder->CommitCommand();
+
+  myCase->AddIteration(nomIter);
+  myIteration->SetCaseName(nomCas);
+}
 //=====================================================================================
 void HOMARD_Gen_i::AssociateHypoZone(const char* nomHypothesis, const char* ZoneName, CORBA::Long TypeUse)
 {
   MESSAGE ( "AssociateHypoZone : nomHypo = " << nomHypothesis << ", ZoneName= " << ZoneName << ", TypeUse = " << TypeUse);
-  IsValidStudy () ;
 
   HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis];
   ASSERT(!CORBA::is_nil(myHypo));
@@ -410,23 +851,69 @@ void HOMARD_Gen_i::AssociateHypoZone(const char* nomHypothesis, const char* Zone
   ASSERT(!CORBA::is_nil(myZone));
   SALOMEDS::SObject_var aZoneSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myZone)));
   ASSERT(!CORBA::is_nil(aZoneSO));
+
   SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+
   aStudyBuilder->NewCommand();
 
   SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aHypoSO);
   aStudyBuilder->Addreference(aSubSO, aZoneSO);
+
   aStudyBuilder->CommitCommand();
 
   myZone->AddHypo(nomHypothesis);
-  myHypo->AddZone(ZoneName, TypeUse);
-  MESSAGE ( "Fin de AssociateHypoZone");
+  myHypo->AddZone0(ZoneName, TypeUse);
 };
+//=============================================================================
+void HOMARD_Gen_i::AssociateIterHypo(const char* nomIter, const char* nomHypo)
+{
+  MESSAGE("AssociateIterHypo : nomHypo = " << nomHypo << " nomIter = " << nomIter);
 
-//=====================================================================================
-void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypothesis)
+  // Verification de l'existence de l'hypothese
+  HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
+  ASSERT(!CORBA::is_nil(myHypo));
+  SALOMEDS::SObject_var aHypoSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myHypo)));
+  ASSERT(!CORBA::is_nil(aHypoSO));
+
+  // Verification de l'existence de l'iteration
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
+  ASSERT(!CORBA::is_nil(myIteration));
+  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
+  ASSERT(!CORBA::is_nil(aIterSO));
+
+  // Gestion de l'arbre d'etudes
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  aStudyBuilder->NewCommand();
+  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aIterSO);
+  aStudyBuilder->Addreference(aSubSO, aHypoSO);
+  aStudyBuilder->CommitCommand();
+
+  // Liens reciproques
+  myIteration->SetHypoName(nomHypo);
+  myHypo->LinkIteration(nomIter);
+
+  // On stocke les noms des champ a interpoler pour le futur controle de la donnee des pas de temps
+  myIteration->SupprFieldInterps() ;
+  HOMARD::listeFieldInterpsHypo* ListField = myHypo->GetFieldInterps();
+  int numberOfFieldsx2 = ListField->length();
+  for (int iaux = 0; iaux< numberOfFieldsx2; iaux++)
+  {
+    std::string FieldName = std::string((*ListField)[iaux]) ;
+    myIteration->SetFieldInterp(FieldName.c_str()) ;
+    iaux++ ;
+  }
+};
+//=============================================================================
+//=============================================================================
+//
+//=============================================================================
+//=============================================================================
+// Dissociation de lien entre des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::DissociateHypoZone(const char* nomHypothesis, const char* ZoneName)
 {
   MESSAGE ( "DissociateHypoZone : ZoneName= " << ZoneName << ", nomHypo = " << nomHypothesis);
-  IsValidStudy () ;
 
   HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis];
   ASSERT(!CORBA::is_nil(myHypo));
@@ -438,7 +925,6 @@ void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypot
   SALOMEDS::SObject_var aZoneSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myZone)));
   ASSERT(!CORBA::is_nil(aZoneSO));
 
-
   SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
 
   SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator(aHypoSO);
@@ -461,321 +947,983 @@ void HOMARD_Gen_i::DissociateHypoZone(const char* ZoneName, const char* nomHypot
   myZone->SupprHypo(nomHypothesis);
   myHypo->SupprZone(ZoneName);
 };
+//=============================================================================
+//=============================================================================
+//
 
 //=============================================================================
-void HOMARD_Gen_i::AssociateIterIter(const char* nomIterParent, const char* nomIter)
+//=============================================================================
+// Recuperation des listes
+//=============================================================================
+//=============================================================================
+HOMARD::listeBoundarys* HOMARD_Gen_i::GetAllBoundarysName()
 {
-  MESSAGE ( "AssociateIterIter : nomIter       = " << nomIter << " nomIterParent = " << nomIterParent);
+  MESSAGE("GetAllBoundarysName");
   IsValidStudy () ;
 
-  HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterParent];
-  ASSERT(!CORBA::is_nil(myIterationParent));
-  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
-  ASSERT(!CORBA::is_nil(myIteration));
+  HOMARD::listeBoundarys_var ret = new HOMARD::listeBoundarys;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesBoundarys.size());
+  std::map<std::string, HOMARD::HOMARD_Boundary_var>::const_iterator it;
+  int i = 0;
+  for (it = myContextMap[GetCurrentStudyID()]._mesBoundarys.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesBoundarys.end(); it++)
+  {
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
+  }
 
-  myIterationParent->AddIteration(nomIter);
-  myIteration->SetIterParent(nomIterParent);
+  return ret._retn();
 }
-
-//===================================================================================
-void HOMARD_Gen_i::AssociateIterHypo(const char* nomIter, const char* nomHypo)
+//=============================================================================
+HOMARD::listeCases* HOMARD_Gen_i::GetAllCasesName()
 {
-  MESSAGE("AssociateIterHypo : nomHypo = " << nomHypo << " nomIter = " << nomIter);
+  MESSAGE("GetAllCasesName");
   IsValidStudy () ;
 
-  HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
-  ASSERT(!CORBA::is_nil(myHypo));
-  SALOMEDS::SObject_var aHypoSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myHypo)));
-  ASSERT(!CORBA::is_nil(aHypoSO));
-
-  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIter];
-  ASSERT(!CORBA::is_nil(myIteration));
-  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
-  ASSERT(!CORBA::is_nil(aIterSO));
-
-  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
-
-  aStudyBuilder->NewCommand();
-
-  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aIterSO);
-  aStudyBuilder->Addreference(aSubSO, aHypoSO);
-
-  aStudyBuilder->CommitCommand();
-
-  myIteration->SetHypoName(nomHypo);
-  myHypo->AddIteration(nomIter);
-};
-
-//=============================================================================
-CORBA::Boolean HOMARD_Gen_i::VerifieDir(const char* nomDir)
-{
+  HOMARD::listeCases_var ret = new HOMARD::listeCases;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesCas.size());
   std::map<std::string, HOMARD::HOMARD_Cas_var>::const_iterator it;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesCas.begin();
-       it != myContextMap[GetCurrentStudyID()]._mesCas.end(); it++)
+  int i = 0;
+  for (it = myContextMap[GetCurrentStudyID()]._mesCas.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesCas.end(); it++)
   {
-   if (std::string(nomDir) == std::string(it->second->GetDirName())) return false;
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
   }
-  return true;
-}
 
+  return ret._retn();
+}
 //=============================================================================
-HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* MeshName, const char* MeshFile)
+HOMARD::listeHypotheses* HOMARD_Gen_i::GetAllHypothesesName()
 {
-  MESSAGE ( "CreateCase : nomCas = " << nomCas << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile );
+  MESSAGE("GetAllHypothesesName");
   IsValidStudy () ;
 
-  if ((myContextMap[GetCurrentStudyID()]._mesCas).find(nomCas)!=(myContextMap[GetCurrentStudyID()]._mesCas).end())
+  HOMARD::listeHypotheses_var ret = new HOMARD::listeHypotheses;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesHypotheses.size());
+  std::map<std::string, HOMARD::HOMARD_Hypothesis_var>::const_iterator it;
+  int i = 0;
+  for (it = myContextMap[GetCurrentStudyID()]._mesHypotheses.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesHypotheses.end(); it++)
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "This case has already been defined";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
-  };
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
+  }
 
-  HOMARD::HOMARD_Cas_var myCase = newCase();
-  myCase->SetName(nomCas);
-  SALOMEDS::SObject_var aSO;
-  PublishInStudy(myCurrentStudy, aSO, myCase, nomCas);
-  myContextMap[GetCurrentStudyID()]._mesCas[nomCas] = myCase;
+  return ret._retn();
+}
+//=============================================================================
+HOMARD::listeIterations* HOMARD_Gen_i::GetAllIterationsName()
+{
+  MESSAGE("GetAllIterationsName");
+  IsValidStudy () ;
 
+  HOMARD::listeIterations_var ret = new HOMARD::listeIterations;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesIterations.size());
+  std::map<std::string, HOMARD::HOMARD_Iteration_var>::const_iterator it;
+  int i = 0;
+  for (it = myContextMap[GetCurrentStudyID()]._mesIterations.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesIterations.end(); it++)
+  {
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
+  }
 
-  std::vector<double> LesExtremes =GetBoundingBoxInMedFile(MeshFile);
-  HOMARD::extrema_var aSeq = new HOMARD::extrema();
-  if (LesExtremes.size()!=10) { return false; }
-  aSeq->length(10);
-  for (int i =0; i< LesExtremes.size(); i++)
-       aSeq[i]=LesExtremes[i];
-  myCase->SetBoundingBox(aSeq);
+  return ret._retn();
+}
+//=============================================================================
+HOMARD::listeYACSs* HOMARD_Gen_i::GetAllYACSsName()
+{
+  MESSAGE("GetAllYACSsName");
+  IsValidStudy () ;
 
-  std::set<std::string> LesGroupes  =GetListeGroupesInMedFile(MeshFile);
-  HOMARD::ListGroupType_var aSeqGroupe = new HOMARD::ListGroupType;
-  aSeqGroupe->length(LesGroupes.size());
-  std::set<std::string>::const_iterator it;
+  HOMARD::listeYACSs_var ret = new HOMARD::listeYACSs;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesYACSs.size());
+  std::map<std::string, HOMARD::HOMARD_YACS_var>::const_iterator it;
   int i = 0;
-  for (it=LesGroupes.begin() ; it != LesGroupes.end(); it++)
-     aSeqGroupe[i++]=(*it).c_str();
-  myCase->SetGroups(aSeqGroupe);
-
-// Recherche d'un nom pour l'iteration 0. Par defaut, on prend le nom
-// du maillage du cas. Si ce nom existe deja, on incremente avec 0, 1, 2, etc.
-  int monNum=0;
-  std::string nomIter = std::string(MeshName) ;
-  while ((myContextMap[GetCurrentStudyID()]._mesIterations).find(nomIter) != (myContextMap[GetCurrentStudyID()]._mesIterations.end()))
+  for (it = myContextMap[GetCurrentStudyID()]._mesYACSs.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesYACSs.end(); it++)
   {
-     std::ostringstream nom;
-     nom << MeshName << monNum;
-     nomIter=nom.str();
-     monNum = monNum+1;
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
   }
 
-  HOMARD::HOMARD_Iteration_var anIter = newIteration();
-  myContextMap[GetCurrentStudyID()]._mesIterations[nomIter] = anIter;
-  std::ostringstream DirName;
-  DirName << "I_00";
-
-  anIter->SetDirName(DirName.str().c_str());
-  anIter->SetName(nomIter.c_str());
-  anIter->SetMeshFile(MeshFile);
-  anIter->SetMeshName(MeshName);
-  anIter->SetNumber(0);
-
-  AssociateCaseIter (nomCas,nomIter.c_str(),"IterationHomard");
-  SetEtatIter(nomIter.c_str(),true);
-//
-  PublishResultInSmesh(MeshFile, 0);
+  return ret._retn();
+}
+//=============================================================================
+HOMARD::listeZones* HOMARD_Gen_i::GetAllZonesName()
+{
+  MESSAGE("GetAllZonesName");
+  IsValidStudy () ;
 
-// Valeurs par defaut des filtrages
-  myCase->SetPyram(0);
+  HOMARD::listeZones_var ret = new HOMARD::listeZones;
+  ret->length(myContextMap[GetCurrentStudyID()]._mesZones.size());
+  std::map<std::string, HOMARD::HOMARD_Zone_var>::const_iterator it;
+  int i = 0;
+  for (it = myContextMap[GetCurrentStudyID()]._mesZones.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesZones.end(); it++)
+  {
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
+  }
 
-  return HOMARD::HOMARD_Cas::_duplicate(myCase);
+  return ret._retn();
 }
+//=============================================================================
+//=============================================================================
 
 //=============================================================================
-HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCas(const char* nomCas)
+//=============================================================================
+// Recuperation des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary)
+{
+  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[nomBoundary];
+  ASSERT(!CORBA::is_nil(myBoundary));
+  return HOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCase(const char* nomCas)
 {
-  IsValidStudy () ;
   HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
-  if (CORBA::is_nil(myCase))
-  {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
-  };
-
+  ASSERT(!CORBA::is_nil(myCase));
   return HOMARD::HOMARD_Cas::_duplicate(myCase);
 }
-
+//=============================================================================
+HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::GetHypothesis(const char* nomHypothesis)
+{
+  HOMARD::HOMARD_Hypothesis_var myHypothesis = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis];
+  ASSERT(!CORBA::is_nil(myHypothesis));
+  return HOMARD::HOMARD_Hypothesis::_duplicate(myHypothesis);
+}
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr  HOMARD_Gen_i::GetIteration(const char* NomIterationation)
+{
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIterationation];
+  ASSERT(!CORBA::is_nil(myIteration));
+  return HOMARD::HOMARD_Iteration::_duplicate(myIteration);
+}
+//=============================================================================
+HOMARD::HOMARD_YACS_ptr HOMARD_Gen_i::GetYACS(const char* nomYACS)
+{
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+  ASSERT(!CORBA::is_nil(myYACS));
+  return HOMARD::HOMARD_YACS::_duplicate(myYACS);
+}
 //=============================================================================
 HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::GetZone(const char* ZoneName)
 {
-  IsValidStudy () ;
   HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
   ASSERT(!CORBA::is_nil(myZone));
   return HOMARD::HOMARD_Zone::_duplicate(myZone);
 }
+//=============================================================================
+//=============================================================================
 
 //=============================================================================
-HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::GetHypothesis(const char* nomHypothesis)
+//=============================================================================
+// Informations
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::MeshInfo(const char* nomCas, const char* MeshName, const char* MeshFile, const char* DirName, CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte)
 {
-  MESSAGE ( "GetHypothesis : nomHypothesis = " << nomHypothesis );
+  INFOS ( "MeshInfo : nomCas = " << nomCas << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile  );
+  INFOS ( "Qual = " << Qual << ", Diam = " << Diam << ", Conn = " << Conn << ", Tail = " << Tail << ", Inte = " << Inte  );
   IsValidStudy () ;
-  MESSAGE ( "GetHypothesis : GetCurrentStudyID() = " << GetCurrentStudyID() );
-  HOMARD::HOMARD_Hypothesis_var myHypothesis = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis];
-  ASSERT(!CORBA::is_nil(myHypothesis));
-  return HOMARD::HOMARD_Hypothesis::_duplicate(myHypothesis);
+
+// Creation du cas
+  int option = 1 ;
+  if ( _PublisMeshIN != 0 ) option = 2 ;
+  HOMARD::HOMARD_Cas_ptr myCase = CreateCase0(nomCas, MeshName, MeshFile, 1, 0, option) ;
+  myCase->SetDirName(DirName) ;
+// Analyse
+  myCase->MeshInfo(Qual, Diam, Conn, Tail, Inte) ;
+
+  return ;
 }
+//=============================================================================
+//=============================================================================
 
 //=============================================================================
-HOMARD::HOMARD_Iteration_ptr  HOMARD_Gen_i::GetIteration(const char* nomIteration)
+//=============================================================================
+// Recuperation des structures par le contexte
+//=============================================================================
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::LastIteration(const char* nomCas)
 {
-  IsValidStudy () ;
-  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration];
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  ASSERT(!CORBA::is_nil(myCase));
+//
+  HOMARD::HOMARD_Iteration_var myIteration = myCase->LastIteration();
   ASSERT(!CORBA::is_nil(myIteration));
+//
   return HOMARD::HOMARD_Iteration::_duplicate(myIteration);
 }
 //=============================================================================
-HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary)
+//=============================================================================
+
+//=============================================================================
+//=============================================================================
+// Nouvelles structures
+//=============================================================================
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::newCase()
 {
-  IsValidStudy () ;
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_Cas_i* aServant = new HOMARD_Cas_i(_orb, engine);
+  HOMARD::HOMARD_Cas_var aCase = HOMARD::HOMARD_Cas::_narrow(aServant->_this());
+  return aCase._retn();
+}
+//=============================================================================
+HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::newHypothesis()
+{
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_Hypothesis_i* aServant = new HOMARD_Hypothesis_i(_orb, engine);
+  HOMARD::HOMARD_Hypothesis_var aHypo = HOMARD::HOMARD_Hypothesis::_narrow(aServant->_this());
+  return aHypo._retn();
+}
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::newIteration()
+{
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_Iteration_i* aServant = new HOMARD_Iteration_i(_orb, engine);
+  HOMARD::HOMARD_Iteration_var aIter = HOMARD::HOMARD_Iteration::_narrow(aServant->_this());
+  return aIter._retn();
+}
+//=============================================================================
+HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::newBoundary()
+{
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_Boundary_i* aServant = new HOMARD_Boundary_i(_orb, engine);
+  HOMARD::HOMARD_Boundary_var aBoundary = HOMARD::HOMARD_Boundary::_narrow(aServant->_this());
+  return aBoundary._retn();
+}
+//=============================================================================
+HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::newZone()
+{
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_Zone_i* aServant = new HOMARD_Zone_i(_orb, engine);
+  HOMARD::HOMARD_Zone_var aZone = HOMARD::HOMARD_Zone::_narrow(aServant->_this());
+  return aZone._retn();
+}
+//=============================================================================
+HOMARD::HOMARD_YACS_ptr HOMARD_Gen_i::newYACS()
+{
+  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
+  HOMARD_YACS_i* aServant = new HOMARD_YACS_i(_orb, engine);
+  HOMARD::HOMARD_YACS_var aYACS = HOMARD::HOMARD_YACS::_narrow(aServant->_this());
+  return aYACS._retn();
+}
+//=============================================================================
+//=============================================================================
 
-  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[nomBoundary];
-  ASSERT(!CORBA::is_nil(myBoundary));
-  return HOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+//=============================================================================
+//=============================================================================
+// Creation des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* nomCas, const char* MeshName, const char* MeshFile)
+//
+// Creation d'un cas initial
+// nomCas : nom du cas a creer
+// MeshName, MeshFile : nom et fichier du maillage correspondant
+//
+{
+  INFOS ( "CreateCase : nomCas = " << nomCas << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile );
+
+  int option = 1 ;
+  if ( _PublisMeshIN != 0 ) option = 2 ;
+  HOMARD::HOMARD_Cas_ptr myCase = CreateCase0(nomCas, MeshName, MeshFile, 0, 0, option) ;
+
+// Valeurs par defaut des filtrages
+  myCase->SetPyram(0);
+
+  return HOMARD::HOMARD_Cas::_duplicate(myCase);
 }
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCaseFromIteration(const char* nomCas, const char* DirNameStart)
+//
+// nomCas : nom du cas a creer
+// DirNameStart : nom du repertoire contenant l'iteration de reprise
+//
+{
+  INFOS ( "CreateCaseFromIteration : nomCas = " << nomCas << ", DirNameStart = " << DirNameStart );
+  std::string nomDirWork = getenv("PWD") ;
+  int codret ;
+
+  // A. Decodage du point de reprise
+  // A.1. Controle du repertoire de depart de l'iteration
+  codret = CHDIR(DirNameStart) ;
+  if ( codret != 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory of the iteration does not exist.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+  // A.2. Reperage des fichiers du repertoire de reprise
+  std::string file_configuration = "" ;
+  std::string file_maillage_homard = "" ;
+  int bilan ;
+#ifndef WIN32
+  DIR *dp;
+  struct dirent *dirp;
+  dp  = opendir(DirNameStart);
+  while ( (dirp = readdir(dp)) != NULL )
+  {
+    std::string file_name(dirp->d_name);
+//     MESSAGE ( file_name );
+    bilan = file_name.find("HOMARD.Configuration.") ;
+    if ( bilan != string::npos ) { file_configuration = file_name ; }
+    bilan = file_name.find("maill.") ;
+    if ( bilan != string::npos )
+    {
+      bilan = file_name.find(".hom.med") ;
+      if ( bilan != string::npos ) { file_maillage_homard = file_name ; }
+    }
+  }
+  closedir(dp);
+#else
+  HANDLE hFind = INVALID_HANDLE_VALUE;
+  WIN32_FIND_DATA ffd;
+  hFind = FindFirstFile(DirNameStart, &ffd);
+  if (INVALID_HANDLE_VALUE != hFind) {
+    while (FindNextFile(hFind, &ffd) != 0) {
+      if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+      std::string file_name(ffd.cFileName);
+      bilan = file_name.find("HOMARD.Configuration.") ;
+      if ( bilan != string::npos ) { file_configuration = file_name ; }
+      bilan = file_name.find("maill.") ;
+      if ( bilan != string::npos )
+      {
+        bilan = file_name.find(".hom.med") ;
+        if ( bilan != string::npos ) { file_maillage_homard = file_name ; }
+      }
+    }
+    FindClose(hFind);
+  }
+#endif
+  MESSAGE ( "==> file_configuration   : " << file_configuration ) ;
+  MESSAGE ( "==> file_maillage_homard : " << file_maillage_homard ) ;
+  // A.3. Controle
+  if ( ( file_configuration == "" ) || ( file_maillage_homard == "" ) )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text ;
+    if ( file_configuration == "" ) { text = "The configuration file cannot be found." ; }
+    else                            { text = "The HOMARD mesh file cannot be found." ; }
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
 
+  // B. Lecture du fichier de configuration
+  // ATTENTION : on doit veiller a la coherence entre HomardDriver et CreateCaseFromIteration
+  int NumeIter ;
+  int TypeExt = 0 ;
+  int TypeConf = 0 ;
+  int Pyram = 0 ;
+  char* MeshName ;
+  char* MeshFile ;
+  // le constructeur de ifstream permet d'ouvrir un fichier en lecture
+  std::ifstream fichier( file_configuration.c_str() );
+  if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
+  {
+    std::string ligne; // variable contenant chaque ligne lue
+    std::string mot_cle;
+    std::string argument;
+    int decalage;
+    // cette boucle sur les lignes s'arrête dès qu'une erreur de lecture survient
+    while ( std::getline( fichier, ligne ) )
+    {
+      // B.1. Pour la ligne courante, on identifie le premier mot : le mot-cle
+      std::istringstream ligne_bis(ligne); // variable contenant chaque ligne sous forme de flux
+      ligne_bis >> mot_cle ;
+      // B.2. Des valeurs entieres : le second bloc de la ligne
+      if ( mot_cle == "NumeIter" )
+      {
+        ligne_bis >> NumeIter ;
+        NumeIter += 1 ;
+      }
+      // B.3. Des valeurs caracteres brutes : le second bloc de la ligne est la valeur
+      else if ( ( mot_cle == "TypeConf" ) || ( mot_cle == "TypeElem" ) )
+      {
+        ligne_bis >> argument ;
+
+        if ( mot_cle == "TypeConf" )
+        {
+          if      ( argument == "conforme" )                { TypeConf = 1 ; }
+          else if ( argument == "non_conforme_1_noeud" )    { TypeConf = 2 ; }
+          else if ( argument == "non_conforme_1_arete" )    { TypeConf = 3 ; }
+          else if ( argument == "non_conforme_indicateur" ) { TypeConf = 4 ; }
+        }
+        else if ( mot_cle == "TypeElem" )
+        {
+          if ( argument == "ignore_pyra" ) { Pyram = 1 ; }
+          else if ( argument == "HOMARD" ) { Pyram = 0 ; }
+        }
+      }
+      // B.4. Des valeurs caracteres : le deuxieme bloc de la ligne peut etre encadre par des quotes :
+      //                               il faut les supprimer
+      else if ( ( mot_cle == "CCNoMNP1" ) || ( mot_cle == "CCMaiNP1" ) )
+      {
+        ligne_bis >> argument ;
+        if ( argument[0] == '"' ) { decalage = 1 ; }
+        else                      { decalage = 0 ; }
+        size_t size = argument.size() + 1 - 2*decalage ;
+
+        if ( mot_cle == "CCNoMNP1" )
+        {
+          MeshName = new char[ size ];
+          strncpy( MeshName, argument.c_str()+decalage, size );
+          MeshName[size-1] = '\0' ;
+        }
+        else if ( mot_cle == "CCMaiNP1" )
+        {
+          MeshFile = new char[ size ];
+          strncpy( MeshFile, argument.c_str()+decalage, size );
+          MeshFile[size-1] = '\0' ;
+        }
+      }
+    }
+    MESSAGE ( "==> TypeConf   : " << TypeConf ) ;
+    MESSAGE ( "==> MeshName   : " << MeshName ) ;
+    MESSAGE ( "==> MeshFile   : " << MeshFile ) ;
+    MESSAGE ( "==> NumeIter   : " << NumeIter ) ;
+    MESSAGE ( "==> Pyram      : " << Pyram ) ;
+  }
+  else
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "The configuration file cannot be read." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // C. Creation effective du cas
+
+  int option = 1 ;
+  if ( _PublisMeshIN != 0 ) option = 2 ;
+  HOMARD::HOMARD_Cas_ptr myCase = CreateCase0(nomCas, MeshName, MeshFile, 1, NumeIter, option) ;
+
+  // D. Parametrages lus dans le fichier de configuration
+
+  myCase->SetConfType (TypeConf) ;
+  myCase->SetExtType (TypeExt) ;
+  myCase->SetPyram (Pyram) ;
+
+  // E. Copie du fichier de maillage homard
+  // E.1. Repertoire associe au cas
+  char* nomDirCase = myCase->GetDirName() ;
+  // E.2. Repertoire associe a l'iteration de ce cas
+  char* IterName ;
+  IterName = myCase->GetIter0Name() ;
+  HOMARD::HOMARD_Iteration_var Iter = GetIteration(IterName) ;
+  char* nomDirIter = CreateDirNameIter(nomDirCase, 0 );
+  Iter->SetDirNameLoc(nomDirIter);
+  std::string nomDirIterTotal ;
+  nomDirIterTotal = std::string(nomDirCase) + "/" + std::string(nomDirIter) ;
+#ifndef WIN32
+  if (mkdir(nomDirIterTotal.c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
+#else
+  if (_mkdir(nomDirIterTotal.c_str()) != 0)
+#endif
+  {
+    MESSAGE ( "nomDirIterTotal : " << nomDirIterTotal ) ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "The directory for the computation cannot be created." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  // E.3. Copie du maillage HOMARD au format MED
+  codret = CHDIR(DirNameStart) ;
+  std::string commande = "cp " + file_maillage_homard + " " + nomDirIterTotal ;
+  MESSAGE ( "commande : " << commande ) ;
+  codret = system(commande.c_str()) ;
+  MESSAGE ( "codret : " << codret ) ;
+  if ( codret != 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The starting point for the case cannot be copied into the working directory.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+
+  // F. Menage
+
+  delete[] MeshName ;
+  delete[] MeshFile ;
+
+  CHDIR(nomDirWork.c_str());
+  return HOMARD::HOMARD_Cas::_duplicate(myCase);
+}
 //=============================================================================
-HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::CreateHypothesis(const char* nomHypothesis)
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCaseFromCaseLastIteration(const char* nomCas, const char* DirNameStart)
+//
+// nomCas : nom du cas a creer
+// DirNameStart : nom du repertoire du cas contenant l'iteration de reprise
+//
+{
+  INFOS ( "CreateCaseFromCaseLastIteration : nomCas = " << nomCas << ", DirNameStart = " << DirNameStart );
+
+  std::string DirNameStartIter = CreateCase1(DirNameStart, -1) ;
+
+  DirNameStartIter = string(DirNameStart) + "/" + DirNameStartIter ;
+  HOMARD::HOMARD_Cas_ptr myCase = CreateCaseFromIteration(nomCas, DirNameStartIter.c_str()) ;
+
+  return HOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCaseFromCaseIteration(const char* nomCas, const char* DirNameStart, CORBA::Long Number)
+//
+// nomCas : nom du cas a creer
+// DirNameStart : nom du repertoire du cas contenant l'iteration de reprise
+// Number : numero de l'iteration de depart
+//
+{
+  INFOS ( "CreateCaseFromCaseIteration : nomCas = " << nomCas << ", DirNameStart = " << DirNameStart << ", Number = " << Number );
+  if ( Number < 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The number of iteration must be positive.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+
+  std::string DirNameStartIter = CreateCase1(DirNameStart, Number) ;
+
+  DirNameStartIter = string(DirNameStart) + "/" + DirNameStartIter ;
+  HOMARD::HOMARD_Cas_ptr myCase = CreateCaseFromIteration(nomCas, DirNameStartIter.c_str()) ;
+
+  return HOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+//=============================================================================
+std::string HOMARD_Gen_i::CreateCase1(const char* DirNameStart, CORBA::Long Number)
+//
+// Retourne le nom du repertoire ou se trouve l'iteration voulue.
+// DirNameStart : nom du repertoire du cas contenant l'iteration de reprise
+// Number : numero de l'iteration de depart ou -1 si on cherche la derniere
+//
+{
+  MESSAGE ( "CreateCase1 : DirNameStart = " << DirNameStart << ", Number = " << Number );
+  std::string nomDirWork = getenv("PWD") ;
+  std::string DirNameStartIter ;
+  int codret ;
+  int NumeIterMax = -1 ;
+
+  // A.1. Controle du repertoire de depart du cas
+  codret = CHDIR(DirNameStart) ;
+  if ( codret != 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory of the case for the pursuit does not exist.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+  // A.2. Reperage des sous-repertoire du repertoire de reprise
+  bool existe = false ;
+#ifndef WIN32
+  DIR *dp;
+  struct dirent *dirp;
+  dp  = opendir(DirNameStart);
+  while ( (dirp = readdir(dp)) != NULL ) {
+    std::string DirName_1(dirp->d_name);
+#else
+  HANDLE hFind = INVALID_HANDLE_VALUE;
+  WIN32_FIND_DATA ffd;
+  hFind = FindFirstFile(DirNameStart, &ffd);
+  if (INVALID_HANDLE_VALUE != hFind) {
+    while (FindNextFile(hFind, &ffd) != 0) {
+      std::string DirName_1 = "";
+      if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+        DirName_1 = std::string(ffd.cFileName);
+      }
+#endif
+    if ( ( DirName_1 != "." ) && ( DirName_1 != ".." ) )
+    {
+      if ( CHDIR(DirName_1.c_str()) == 0 )
+      {
+//      On cherche le fichier de configuration dans ce sous-repertoire
+        codret = CHDIR(DirNameStart);
+#ifndef WIN32
+        DIR *dp_1;
+        struct dirent *dirp_1;
+        dp_1  = opendir(DirName_1.c_str()) ;
+        while ( (dirp_1 = readdir(dp_1)) != NULL )
+        {
+          std::string file_name_1(dirp_1->d_name);
+#else
+        HANDLE hFind1 = INVALID_HANDLE_VALUE;
+        WIN32_FIND_DATA ffd1;
+        hFind1 = FindFirstFile(DirName_1.c_str(), &ffd1);
+        while (FindNextFile(hFind1, &ffd1) != 0)
+        {
+          if (ffd1.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+          std::string file_name_1(ffd1.cFileName);
+#endif
+          int bilan = file_name_1.find("HOMARD.Configuration.") ;
+          if ( bilan != string::npos )
+          {
+  // Decodage du fichier pour trouver le numero d'iteration
+            CHDIR(DirName_1.c_str()) ;
+
+            std::ifstream fichier( file_name_1.c_str() );
+            if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
+            {
+              int NumeIter ;
+              std::string ligne; // variable contenant chaque ligne lue
+              std::string mot_cle;
+              // cette boucle sur les lignes s'arrête dès qu'une erreur de lecture survient
+              while ( std::getline( fichier, ligne ) )
+              {
+                // B.1. Pour la ligne courante, on identifie le premier mot : le mot-cle
+                std::istringstream ligne_bis(ligne); // variable contenant chaque ligne sous forme de flux
+                ligne_bis >> mot_cle ;
+                if ( mot_cle == "NumeIter" )
+                {
+                  ligne_bis >> NumeIter ;
+                  NumeIter += 1 ;
+//                   MESSAGE ( "==> NumeIter   : " << NumeIter ) ;
+                  if ( Number == - 1 )
+                  {
+                    if ( NumeIter >= NumeIterMax )
+                    {
+                      NumeIterMax = NumeIter ;
+                      DirNameStartIter = DirName_1 ;
+                    }
+                  }
+                  else
+                  {
+                    if ( NumeIter == Number )
+                    {
+                      DirNameStartIter = DirName_1 ;
+                      existe = true ;
+                      break ;
+                    }
+                  }
+                }
+              }
+            }
+            else
+            {
+              SALOME::ExceptionStruct es;
+              es.type = SALOME::BAD_PARAM;
+              std::string text = "The configuration file cannot be read." ;
+              es.text = CORBA::string_dup(text.c_str());
+              throw SALOME::SALOME_Exception(es);
+            }
+            CHDIR(DirNameStart) ;
+          }
+          if ( existe ) { break ; }
+        }
+#ifndef WIN32
+        closedir(dp_1);
+#else
+        FindClose(hFind1);
+#endif
+        if ( existe ) { break ; }
+     }
+    }
+  }
+#ifndef WIN32
+  closedir(dp);
+#else
+  FindClose(hFind);
+#endif
+  CHDIR(nomDirWork.c_str());
+
+  if ( ( Number >= 0 && ( !existe ) ) || ( Number < 0 && ( NumeIterMax == -1 ) ) )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory of the iteration does not exist.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+
+  return DirNameStartIter ;
+}
+//=============================================================================
+HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase0(const char* nomCas, const char* MeshName, const char* MeshFile, CORBA::Long MeshOption, CORBA::Long NumeIter, CORBA::Long Option)
+//
+// nomCas : nom du cas a creer
+// MeshName, MeshFile : nom et fichier du maillage correspondant
+// MeshOption : 0 : le maillage fourni est obligatoirement present ==> erreur si absent
+//              1 : le maillage fourni peut ne pas exister ==> on continue si absent
+//             -1 : le maillage n'est pas fourni
+// NumeIter : numero de l'iteration correspondante : 0, pour un depart, n>0 pour une poursuite
+// Option : multiple de nombres premiers
+//         1 : aucune option
+//        x2 : publication du maillage dans SMESH
 {
-  MESSAGE ( "CreateHypothesis : nomHypothesis  = " << nomHypothesis );
+  MESSAGE ( "CreateCase0 : nomCas = " << nomCas );
+  MESSAGE ( "CreateCase0 : MeshName = " << MeshName << ", MeshFile = " << MeshFile << ", MeshOption = " << MeshOption );
+  MESSAGE ( "CreateCase0 : NumeIter = " << NumeIter << ", Option = " << Option );
+//
+  // A. Controles
+  // A.1. L'etude
   IsValidStudy () ;
 
-  if ((myContextMap[GetCurrentStudyID()]._mesHypotheses).find(nomHypothesis) != (myContextMap[GetCurrentStudyID()]._mesHypotheses).end())
+  // A.2. Controle du nom :
+  if ((myContextMap[GetCurrentStudyID()]._mesCas).find(nomCas)!=(myContextMap[GetCurrentStudyID()]._mesCas).end())
   {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This case has already been defined.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+
+  // A.3. Controle du fichier du maillage
+  int existeMeshFile ;
+  if ( MeshOption >= 0 )
+  {
+    existeMeshFile = MEDFileExist ( MeshFile ) ;
+    MESSAGE ( "CreateCase0 : existeMeshFile = " << existeMeshFile );
+    if ( ( existeMeshFile == 0 ) && ( MeshOption == 0 ) )
+    {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "This hypothesis is already defined.";
+      es.text = "The mesh file does not exist.";
       throw SALOME::SALOME_Exception(es);
       return 0;
     }
+  }
+  else { existeMeshFile = 0 ; }
+
+  // B. Creation de l'objet cas et publication
+//   MESSAGE ( "CreateCase0 : Creation de l'objet" );
+  HOMARD::HOMARD_Cas_var myCase = newCase();
+  myCase->SetName(nomCas);
+  SALOMEDS::SObject_var aSO;
+  SALOMEDS::SObject_var aResultSO=PublishInStudy(myCurrentStudy, aSO, myCase, nomCas);
+  myContextMap[GetCurrentStudyID()]._mesCas[nomCas] = myCase;
+
+  // C. Caracteristiques du maillage
+  if ( existeMeshFile != 0 )
+  {
+  // Les valeurs extremes des coordonnees
+//     MESSAGE ( "CreateCase0 : Les valeurs extremes des coordonnees" );
+    std::vector<double> LesExtremes =GetBoundingBoxInMedFile(MeshFile) ;
+    HOMARD::extrema_var aSeq = new HOMARD::extrema() ;
+    if (LesExtremes.size()!=10) { return 0; }
+    aSeq->length(10) ;
+    for (int i =0 ; i< LesExtremes.size() ; i++)
+        aSeq[i]=LesExtremes[i] ;
+    myCase->SetBoundingBox(aSeq) ;
+  // Les groupes
+//     MESSAGE ( "CreateCase0 : Les groupes" );
+    std::set<std::string> LesGroupes  =GetListeGroupesInMedFile(MeshFile) ;
+    HOMARD::ListGroupType_var aSeqGroupe = new HOMARD::ListGroupType ;
+    aSeqGroupe->length(LesGroupes.size());
+    std::set<std::string>::const_iterator it ;
+    int i = 0 ;
+    for (it=LesGroupes.begin() ; it != LesGroupes.end() ; it++)
+      aSeqGroupe[i++]=(*it).c_str() ;
+    myCase->SetGroups(aSeqGroupe) ;
+  }
+
+  // D. L'iteration initiale du cas
+  MESSAGE ( "CreateCase0 : iteration initiale du cas" );
+  // D.1. Recherche d'un nom : par defaut, on prend le nom du maillage correspondant.
+  // Si ce nom d'iteration existe deja, on incremente avec 0, 1, 2, etc.
+  int monNum = 0;
+  std::string NomIteration = std::string(MeshName) ;
+  while ( (myContextMap[GetCurrentStudyID()]._mesIterations).find(NomIteration) != (myContextMap[GetCurrentStudyID()]._mesIterations.end()) )
+  {
+    std::ostringstream nom;
+    nom << MeshName << monNum;
+    NomIteration = nom.str();
+    monNum += 1;
+  }
+  MESSAGE ( "CreateCas0 : ==> NomIteration = " << NomIteration );
+
+  // D.2. Creation de l'iteration
+  HOMARD::HOMARD_Iteration_var anIter = newIteration();
+  myContextMap[GetCurrentStudyID()]._mesIterations[NomIteration] = anIter;
+  anIter->SetName(NomIteration.c_str());
+  AssociateCaseIter (nomCas, NomIteration.c_str(), "IterationHomard");
+
+  // D.4. Maillage correspondant
+  if ( existeMeshFile != 0 )
+  {
+    anIter->SetMeshFile(MeshFile);
+    if ( Option % 2 == 0 ) { PublishResultInSmesh(MeshFile, 0); }
+  }
+  anIter->SetMeshName(MeshName);
+
+  // D.5. Numero d'iteration
+  anIter->SetNumber(NumeIter);
 
+  // D.6. Etat
+  SetEtatIter(NomIteration.c_str(), -NumeIter);
+//
+
+  return HOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+//=============================================================================
+HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::CreateHypothesis(const char* nomHypothesis)
+{
+  INFOS ( "CreateHypothesis : nomHypothesis = " << nomHypothesis );
+  IsValidStudy () ;
+
+  // A. Controle du nom :
+  if ((myContextMap[GetCurrentStudyID()]._mesHypotheses).find(nomHypothesis) != (myContextMap[GetCurrentStudyID()]._mesHypotheses).end())
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This hypothesis has already been defined.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  }
+
+  // B. Creation de l'objet
   HOMARD::HOMARD_Hypothesis_var myHypothesis = newHypothesis();
+  if (CORBA::is_nil(myHypothesis))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Unable to create the hypothesis";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
   myHypothesis->SetName(nomHypothesis);
+
+  // C. Enregistrement
   myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypothesis] = myHypothesis;
+
   SALOMEDS::SObject_var aSO;
-  PublishInStudy(myCurrentStudy, aSO, myHypothesis, nomHypothesis);
+  SALOMEDS::SObject_var aResultSO=PublishInStudy(myCurrentStudy, aSO, myHypothesis, nomHypothesis);
 
-// Valeurs par defaut des options avancees
+  // D. Valeurs par defaut des options avancees
   myHypothesis->SetNivMax(-1);
   myHypothesis->SetDiamMin(-1.0);
   myHypothesis->SetAdapInit(0);
+  myHypothesis->SetExtraOutput(1);
 
   return HOMARD::HOMARD_Hypothesis::_duplicate(myHypothesis);
 }
 
-//============================================================================================================
-HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::CreateIteration(const char* nomIteration, const char* nomIterParent)
-//============================================================================================================
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::CreateIteration(const char* NomIteration, const char* nomIterParent)
+//=============================================================================
 {
-  MESSAGE ("CreateIteration : nomIteration  = " << nomIteration << "nomIterParent = " << nomIterParent);
+  INFOS ("CreateIteration : NomIteration  = " << NomIteration << ", nomIterParent = " << nomIterParent);
   IsValidStudy () ;
 
   HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterParent];
   if (CORBA::is_nil(myIterationParent))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "The parent iteration is not defined.";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The parent iteration is not defined.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
 
-  const char* nomCas = GetCaseName(nomIterParent);
+  const char* nomCas = myIterationParent->GetCaseName();
   MESSAGE ("CreateIteration : nomCas = " << nomCas);
   HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
   if (CORBA::is_nil(myCase))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Case Context ";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case context";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
+  const char* nomDirCase = myCase->GetDirName();
 
-  if ((myContextMap[GetCurrentStudyID()]._mesIterations).find(nomIteration)!=(myContextMap[GetCurrentStudyID()]._mesIterations).end())
+  // Controle du nom :
+  if ((myContextMap[GetCurrentStudyID()]._mesIterations).find(NomIteration)!=(myContextMap[GetCurrentStudyID()]._mesIterations).end())
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "This iteration is already defined. ";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This iteration has already been defined.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
 
    HOMARD::HOMARD_Iteration_var myIteration = newIteration();
    if (CORBA::is_nil(myIteration))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Unable to create Iteration ";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Unable to create the iteration";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
-   myContextMap[GetCurrentStudyID()]._mesIterations[std::string(nomIteration)] = myIteration;
-   myIteration->SetName(nomIteration);
-   myIteration->SetMeshName(nomIteration);
+  myContextMap[GetCurrentStudyID()]._mesIterations[std::string(NomIteration)] = myIteration;
+// Nom de l'iteration et du maillage
+  myIteration->SetName(NomIteration);
+  myIteration->SetMeshName(NomIteration);
+  myIteration->SetState(1);
 
-   int numero = myIterationParent->GetNumber() + 1;
-   myIteration->SetNumber(numero);
+  int numero = myIterationParent->GetNumber() + 1;
+  myIteration->SetNumber(numero);
 
 // Nombre d'iterations deja connues pour le cas, permettant
 // la creation d'un sous-repertoire unique
-   int nbitercase = myCase->GetNumber();
-   std::ostringstream iaux ;
-   iaux << std::setw(2) << std::setfill('0') << nbitercase ;
-   std::stringstream DirName;
-   DirName << "I" << iaux.str();
-   myIteration->SetDirName(DirName.str().c_str());
+  int nbitercase = myCase->GetNumberofIter();
+  char* nomDirIter = CreateDirNameIter(nomDirCase, nbitercase );
+  myIteration->SetDirNameLoc(nomDirIter);
 
 // Le nom du fichier du maillage MED est indice par le nombre d'iterations du cas.
 // Si on a une chaine unique depuis le depart, ce nombre est le meme que le
-// numero d'iteration dans la sucession : maill.01.med, maill.02.med, etc... C'est le
-// cas le plus frequent.
-// Si on a plusieurs branches, donc des iterations a meme niveau d'adaptation, utiliser
+// numero d'iteration dans la sucession : maill.01.med, maill.02.med, etc... C'est la
+// situation la plus frequente.
+// Si on a plusieurs branches, donc des iterations du meme niveau d'adaptation, utiliser
 // le nombre d'iterations du cas permet d'eviter les collisions.
-   std::stringstream MeshFile;
-   const char* nomDir = myCase->GetDirName();
-   MeshFile << nomDir << "/maill." << iaux.str() << ".med";
-   myIteration->SetMeshFile(MeshFile.str().c_str());
-
-// Association avec le cas et l'iteration precedente
-   std::string label = "IterationHomard_" + std::string(nomIterParent);
-   AssociateCaseIter(nomCas, nomIteration, label.c_str());
-   AssociateIterIter (nomIterParent,nomIteration);
+  int jaux ;
+  if      ( nbitercase <    100 ) { jaux = 2 ; }
+  else if ( nbitercase <   1000 ) { jaux = 3 ; }
+  else if ( nbitercase <  10000 ) { jaux = 4 ; }
+  else if ( nbitercase < 100000 ) { jaux = 5 ; }
+  else                            { jaux = 9 ; }
+  std::ostringstream iaux ;
+  iaux << std::setw(jaux) << std::setfill('0') << nbitercase ;
+  std::stringstream MeshFile;
+  MeshFile << nomDirCase << "/maill." << iaux.str() << ".med";
+  myIteration->SetMeshFile(MeshFile.str().c_str());
+
+// Association avec le cas
+  std::string label = "IterationHomard_" + std::string(nomIterParent);
+  AssociateCaseIter(nomCas, NomIteration, label.c_str());
+// Lien avec l'iteration precedente
+  myIterationParent->LinkNextIteration(NomIteration);
+  myIteration->SetIterParentName(nomIterParent);
+  // Gestion de l'arbre d'etudes
+  SALOMEDS::SObject_var aIterSOParent = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIterationParent)));
+  SALOMEDS::SObject_var aIterSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+  aStudyBuilder->NewCommand();
+  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aIterSO);
+  aStudyBuilder->Addreference(aSubSO, aIterSOParent);
+  aStudyBuilder->CommitCommand();
 
-   return HOMARD::HOMARD_Iteration::_duplicate(myIteration);
+  return HOMARD::HOMARD_Iteration::_duplicate(myIteration);
 }
-
-
 //=============================================================================
 HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryName, CORBA::Long BoundaryType)
 {
   MESSAGE ("CreateBoundary : BoundaryName  = " << BoundaryName << ", BoundaryType = " << BoundaryType);
   IsValidStudy () ;
 
+  // Controle du nom :
   if ((myContextMap[GetCurrentStudyID()]._mesBoundarys).find(BoundaryName)!=(myContextMap[GetCurrentStudyID()]._mesBoundarys).end())
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "This boundary has already been defined";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    MESSAGE ("CreateBoundary : la frontiere " << BoundaryName << " existe deja");
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This boundary has already been defined";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
 
   HOMARD::HOMARD_Boundary_var myBoundary = newBoundary();
   myBoundary->SetName(BoundaryName);
-  myBoundary->SetBoundaryType(BoundaryType);
+  myBoundary->SetType(BoundaryType);
 
   myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName] = myBoundary;
 
@@ -787,7 +1935,7 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryNam
 //=============================================================================
 HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryDi(const char* BoundaryName, const char* MeshName, const char* MeshFile)
 {
-  MESSAGE ("CreateBoundaryDi : BoundaryName  = " << BoundaryName << "MeshName = " << MeshName );
+  INFOS ("CreateBoundaryDi : BoundaryName  = " << BoundaryName << ", MeshName = " << MeshName );
   HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 0);
   myBoundary->SetMeshFile( MeshFile ) ;
   myBoundary->SetMeshName( MeshName ) ;
@@ -797,12 +1945,29 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryDi(const char* BoundaryN
 //=============================================================================
 HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCylinder(const char* BoundaryName,
                                       CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
-                                      CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
                                       CORBA::Double Rayon)
 {
-  MESSAGE ("CreateBoundaryCylinder : BoundaryName  = " << BoundaryName ) ;
+  INFOS ("CreateBoundaryCylinder : BoundaryName  = " << BoundaryName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The axis must be a non 0 vector." ;
+    error = 2 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 1) ;
-  myBoundary->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxis, Yaxis, Zaxis, Rayon ) ;
+  myBoundary->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon ) ;
 
   return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ;
 }
@@ -811,32 +1976,133 @@ HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundarySphere(const char* Bound
                                       CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
                                       CORBA::Double Rayon)
 {
-  MESSAGE ("CreateBoundarySphere : BoundaryName  = " << BoundaryName ) ;
+  INFOS ("CreateBoundarySphere : BoundaryName  = " << BoundaryName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 2) ;
   myBoundary->SetSphere( Xcentre, Ycentre, Zcentre, Rayon ) ;
 
   return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ;
 }
+//=============================================================================
+HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeA(const char* BoundaryName,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe, CORBA::Double Angle,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre)
+{
+  INFOS ("CreateBoundaryConeA : BoundaryName  = " << BoundaryName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Angle <= 0.0 || Angle >= 90.0 )
+  { es.text = "The angle must be included higher than 0 degree and lower than 90 degrees." ;
+    error = 1 ; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The axis must be a non 0 vector." ;
+    error = 2 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 3) ;
+  myBoundary->SetConeA( Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre ) ;
+
+  return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ;
+}
+//=============================================================================
+HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeR(const char* BoundaryName,
+                                      CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1, CORBA::Double Rayon1,
+                                      CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2, CORBA::Double Rayon2)
+{
+  INFOS ("CreateBoundaryConeR : BoundaryName  = " << BoundaryName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon1 < 0.0 || Rayon2 < 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  double daux = fabs(Rayon2-Rayon1) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The radius must be different." ;
+    error = 2 ; }
+  daux = fabs(Xcentre2-Xcentre1) + fabs(Ycentre2-Ycentre1) + fabs(Zcentre2-Zcentre1) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The centers must be different." ;
+    error = 3 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 4) ;
+  myBoundary->SetConeR( Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2 ) ;
 
+  return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ;
+}
+//=============================================================================
+HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryTorus(const char* BoundaryName,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
+                                      CORBA::Double RayonRev, CORBA::Double RayonPri)
+{
+  INFOS ("CreateBoundaryTorus : BoundaryName  = " << BoundaryName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( ( RayonRev <= 0.0 ) || ( RayonPri <= 0.0 ) )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The axis must be a non 0 vector." ;
+    error = 2 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  HOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 5) ;
+  myBoundary->SetTorus( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, RayonRev, RayonPri ) ;
 
+  return HOMARD::HOMARD_Boundary::_duplicate(myBoundary) ;
+}
 //=============================================================================
 HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZone(const char* ZoneName, CORBA::Long ZoneType)
 {
   MESSAGE ("CreateZone : ZoneName  = " << ZoneName << ", ZoneType = " << ZoneType);
   IsValidStudy () ;
 
+  // Controle du nom :
   if ((myContextMap[GetCurrentStudyID()]._mesZones).find(ZoneName)!=(myContextMap[GetCurrentStudyID()]._mesZones).end())
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "This zone has already been defined";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This zone has already been defined";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
   };
 
   HOMARD::HOMARD_Zone_var myZone = newZone();
   myZone->SetName(ZoneName);
-  myZone->SetZoneType(ZoneType);
+  myZone->SetType(ZoneType);
 
   myContextMap[GetCurrentStudyID()]._mesZones[ZoneName] = myZone;
 
@@ -851,7 +2117,26 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox(const char* ZoneName,
                                       CORBA::Double Ymini, CORBA::Double Ymaxi,
                                       CORBA::Double Zmini, CORBA::Double Zmaxi)
 {
-  MESSAGE ("CreateZoneBox : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneBox : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Xmini > Xmaxi )
+  { es.text = "The X coordinates are not coherent." ;
+    error = 1 ; }
+  if ( Ymini > Ymaxi )
+  { es.text = "The Y coordinates are not coherent." ;
+    error = 2 ; }
+  if ( Zmini > Zmaxi )
+  { es.text = "The Z coordinates are not coherent." ;
+    error = 3 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 2) ;
   myZone->SetBox ( Xmini, Xmaxi, Ymini, Ymaxi, Zmini, Zmaxi) ;
 
@@ -861,7 +2146,20 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox(const char* ZoneName,
 HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneSphere(const char* ZoneName,
                                       CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, CORBA::Double Rayon)
 {
-  MESSAGE ("CreateZoneSphere : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneSphere : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 4) ;
   myZone->SetSphere( Xcentre, Ycentre, Zcentre, Rayon ) ;
 
@@ -873,7 +2171,27 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneCylinder(const char* ZoneName,
                                       CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
                                       CORBA::Double Rayon, CORBA::Double Haut)
 {
-  MESSAGE ("CreateZoneCylinder : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneCylinder : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The axis must be a non 0 vector." ;
+    error = 2 ; }
+  if ( Haut <= 0.0 )
+  { es.text = "The height must be positive." ;
+    error = 3 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 5) ;
   myZone->SetCylinder( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon, Haut ) ;
 
@@ -885,7 +2203,30 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZonePipe(const char* ZoneName,
                                       CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
                                       CORBA::Double Rayon, CORBA::Double Haut, CORBA::Double Rayonint)
 {
-  MESSAGE ("CreateZonePipe : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZonePipe : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 || Rayonint <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe) ;
+  if ( daux < 0.0000001 )
+  { es.text = "The axis must be a non 0 vector." ;
+    error = 2 ; }
+  if ( Haut <= 0.0 )
+  { es.text = "The height must be positive." ;
+    error = 3 ; }
+  if ( Rayon <= Rayonint )
+  { es.text = "The external radius must be higher than the internal radius." ;
+    error = 4 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 7) ;
   myZone->SetPipe( Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon, Haut, Rayonint ) ;
 
@@ -897,11 +2238,29 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox2D(const char* ZoneName,
                                       CORBA::Double Vmini, CORBA::Double Vmaxi,
                                       CORBA::Long Orient)
 {
-  MESSAGE ("CreateZoneBox2D : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneBox2D : ZoneName  = " << ZoneName ) ;
 //   MESSAGE ("Umini = " << Umini << ", Umaxi =" << Umaxi ) ;
 //   MESSAGE ("Vmini = " << Vmini << ", Vmaxi =" << Vmaxi ) ;
 //   MESSAGE ("Orient = " << Orient ) ;
-
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Umini > Umaxi )
+  { es.text = "The first coordinates are not coherent." ;
+    error = 1 ; }
+  if ( Vmini > Vmaxi )
+  { es.text = "The second coordinates are not coherent." ;
+    error = 2 ; }
+  if ( Orient < 1 || Orient > 3 )
+  { es.text = "The orientation must be 1, 2 or 3." ;
+    error = 3 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   double Xmini, Xmaxi ;
   double Ymini, Ymaxi ;
   double Zmini, Zmaxi ;
@@ -926,7 +2285,7 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneBox2D(const char* ZoneName,
     Ymaxi = 0. ;
     Zmini = Umini ;
     Zmaxi = Umaxi ; }
-  else { ASSERT( Orient >= 1 and Orient <= 3 ) ; }
+  else { VERIFICATION( (Orient>=1) && (Orient<=3) ) ; }
 
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 10+Orient) ;
   myZone->SetBox ( Xmini, Xmaxi, Ymini, Ymaxi, Zmini, Zmaxi) ;
@@ -939,7 +2298,23 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDisk(const char* ZoneName,
                                       CORBA::Double Rayon,
                                       CORBA::Long Orient)
 {
-  MESSAGE ("CreateZoneDisk : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneDisk : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  if ( Orient < 1 || Orient > 3 )
+  { es.text = "The orientation must be 1, 2 or 3." ;
+    error = 3 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   double Xcentre ;
   double Ycentre ;
   double Zcentre ;
@@ -955,7 +2330,7 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDisk(const char* ZoneName,
   { Xcentre = Vcentre ;
     Ycentre = 0. ;
     Zcentre = Ucentre ; }
-  else { ASSERT( Orient >= 1 and Orient <= 3 ) ; }
+  else { VERIFICATION( (Orient>=1) && (Orient<=3) ) ; }
 
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 30+Orient) ;
   myZone->SetCylinder( Xcentre, Ycentre, Zcentre, 0., 0., 1., Rayon, 1. ) ;
@@ -968,7 +2343,26 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDiskWithHole(const char* ZoneNam
                                       CORBA::Double Rayon, CORBA::Double Rayonint,
                                       CORBA::Long Orient)
 {
-  MESSAGE ("CreateZoneDiskWithHole : ZoneName  = " << ZoneName ) ;
+  INFOS ("CreateZoneDiskWithHole : ZoneName  = " << ZoneName ) ;
+//
+  SALOME::ExceptionStruct es;
+  int error = 0 ;
+  if ( Rayon <= 0.0 || Rayonint <= 0.0 )
+  { es.text = "The radius must be positive." ;
+    error = 1 ; }
+  if ( Orient < 1 || Orient > 3 )
+  { es.text = "The orientation must be 1, 2 or 3." ;
+    error = 3 ; }
+  if ( Rayon <= Rayonint )
+  { es.text = "The external radius must be higher than the internal radius." ;
+    error = 4 ; }
+  if ( error != 0 )
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
   double Xcentre ;
   double Ycentre ;
   double Zcentre ;
@@ -984,405 +2378,806 @@ HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::CreateZoneDiskWithHole(const char* ZoneNam
   { Xcentre = Vcentre ;
     Ycentre = 0. ;
     Zcentre = Ucentre ; }
-  else { ASSERT( Orient >= 1 and Orient <= 3 ) ; }
+  else { VERIFICATION( (Orient>=1) && (Orient<=3) ) ; }
 
   HOMARD::HOMARD_Zone_var myZone = CreateZone(ZoneName, 60+Orient) ;
   myZone->SetPipe( Xcentre, Ycentre, Zcentre, 0., 0., 1., Rayon, 1., Rayonint ) ;
 
   return HOMARD::HOMARD_Zone::_duplicate(myZone) ;
 }
+//=============================================================================
+//=============================================================================
+
+
+
+
+//=============================================================================
+//=============================================================================
+// Traitement d'une iteration
+// etatMenage = 1 : destruction du repertoire d'execution
+// modeHOMARD  = 1 : adaptation
+//            != 1 : information avec les options modeHOMARD
+// Option1 >0 : appel depuis python
+//         <0 : appel depuis GUI
+// Option2 : multiple de nombres premiers
+//         1 : aucune option
+//        x2 : publication du maillage dans SMESH
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::Compute(const char* NomIteration, CORBA::Long etatMenage, CORBA::Long modeHOMARD, CORBA::Long Option1, CORBA::Long Option2)
+{
+  INFOS ( "Compute : traitement de " << NomIteration << ", avec modeHOMARD = " << modeHOMARD << ", Option1 = " << Option1 << ", Option2 = " << Option2 );
+
+  // A. Prealable
+  int codret = 0;
+
+  // A.1. L'objet iteration
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIteration];
+  ASSERT(!CORBA::is_nil(myIteration));
+
+  // A.2. Controle de la possibilite d'agir
+  // A.2.1. Etat de l'iteration
+  int etat = myIteration->GetState();
+  MESSAGE ( "etat = "<<etat );
+  // A.2.2. On ne calcule pas l'iteration initiale, ni une iteration deja calculee
+  if ( modeHOMARD == 1 )
+  {
+    if ( etat <= 0 )
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "This iteration is the first of the case and cannot be computed.";
+      throw SALOME::SALOME_Exception(es);
+      return 1 ;
+    }
+    else if ( ( etat == 2 ) & ( modeHOMARD == 1 ) )
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "This iteration is already computed.";
+      throw SALOME::SALOME_Exception(es);
+      return 1 ;
+    }
+  }
+  // A.2.3. On n'analyse pas une iteration non calculee
+  else
+  {
+    if ( etat == 1 )
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "This iteration is not computed.";
+      throw SALOME::SALOME_Exception(es);
+      return 1 ;
+    }
+  }
+
+  // A.3. Numero de l'iteration
+  //     siterp1 : numero de l'iteration a traiter
+  //     Si adaptation :
+  //        siter   : numero de l'iteration parent, ou 0 si deja au debut mais cela ne servira pas !
+  //     Ou si information :
+  //        siter = siterp1
+  int NumeIter = myIteration->GetNumber();
+  std::string siterp1 ;
+  std::stringstream saux1 ;
+  saux1 << NumeIter ;
+  siterp1 = saux1.str() ;
+  if (NumeIter < 10) { siterp1 = "0" + siterp1 ; }
+
+  std::string siter ;
+  if ( modeHOMARD==1 )
+  {
+    std::stringstream saux0 ;
+    int iaux = max(0, NumeIter-1) ;
+    saux0 << iaux ;
+    siter = saux0.str() ;
+    if (NumeIter < 11) { siter = "0" + siter ; }
+  }
+  else
+  { siter = siterp1 ; }
+
+  // A.4. Le cas
+  const char* nomCas = myIteration->GetCaseName();
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  ASSERT(!CORBA::is_nil(myCase));
+
+  // B. Les repertoires
+  // B.1. Le repertoire courant
+  std::string nomDirWork = getenv("PWD") ;
+  // B.2. Le sous-repertoire de l'iteration a traiter
+  char* DirCompute = ComputeDirManagement(myCase, myIteration, etatMenage);
+  MESSAGE( ". DirCompute = " << DirCompute );
+
+  // C. Le fichier des messages
+  // C.1. Le deroulement de l'execution de HOMARD
+  std::string LogFile = DirCompute ;
+  LogFile += "/Liste" ;
+  if ( modeHOMARD == 1 ) { LogFile += "." + siter + ".vers." + siterp1 ; }
+  LogFile += ".log" ;
+  MESSAGE (". LogFile = " << LogFile);
+  if ( modeHOMARD == 1 ) { myIteration->SetLogFile(LogFile.c_str()); }
+  // C.2. Le bilan de l'analyse du maillage
+  std::string FileInfo = DirCompute ;
+  FileInfo += "/" ;
+  if ( modeHOMARD == 1 ) { FileInfo += "apad" ; }
+  else
+  { if ( NumeIter == 0 ) { FileInfo += "info_av" ; }
+    else                 { FileInfo += "info_ap" ; }
+  }
+  FileInfo += "." + siterp1 + ".bilan" ;
+  myIteration->SetFileInfo(FileInfo.c_str());
+
+   // D. On passe dans le repertoire de l'iteration a calculer
+  MESSAGE ( ". On passe dans DirCompute = " << DirCompute );
+  CHDIR(DirCompute);
+
+  // E. Les donnees de l'execution HOMARD
+  // E.1. L'objet du texte du fichier de configuration
+  HomardDriver* myDriver = new HomardDriver(siter, siterp1);
+  myDriver->TexteInit(DirCompute, LogFile, _Langue);
+
+  // E.2. Le maillage associe a l'iteration
+  const char* NomMesh = myIteration->GetMeshName();
+  MESSAGE ( ". NomMesh = " << NomMesh );
+  const char* MeshFile = myIteration->GetMeshFile();
+  MESSAGE ( ". MeshFile = " << MeshFile );
+
+  // E.3. Les donnees du traitement HOMARD
+  int iaux ;
+  if ( modeHOMARD == 1 )
+  {
+    iaux = 1 ;
+    myDriver->TexteMaillageHOMARD( DirCompute, siterp1, iaux ) ;
+    myDriver->TexteMaillage(NomMesh, MeshFile, 1);
+    codret = ComputeAdap(myCase, myIteration, etatMenage, myDriver, Option1, Option2) ;
+  }
+  else
+  {
+    InvalideIterInfo(NomIteration);
+    myDriver->TexteInfo( modeHOMARD, NumeIter ) ;
+    iaux = 0 ;
+    myDriver->TexteMaillageHOMARD( DirCompute, siterp1, iaux ) ;
+    myDriver->TexteMaillage(NomMesh, MeshFile, 0);
+    myDriver->CreeFichierDonn();
+  }
+
+  // E.4. Ajout des informations liees a l'eventuel suivi de frontiere
+  DriverTexteBoundary(myCase, myDriver) ;
+
+  // E.5. Ecriture du texte dans le fichier
+  MESSAGE ( ". Ecriture du texte dans le fichier de configuration ; codret = "<<codret );
+  if (codret == 0)
+  { myDriver->CreeFichier(); }
+
+// G. Execution
+//
+  int codretexec = 12 ;
+  if (codret == 0)
+  {
+    codretexec = myDriver->ExecuteHomard(Option1);
+//
+    MESSAGE ( "Erreur en executant HOMARD : " << codretexec );
+    // En mode adaptation, on ajuste l'etat de l'iteration
+    if ( modeHOMARD == 1 )
+    {
+      if (codretexec == 0) { SetEtatIter(NomIteration,2); }
+      else                 { SetEtatIter(NomIteration,1); }
+      // GERALD -- QMESSAGE BOX
+    }
+  }
+
+  // H. Gestion des resultats
+  if (codret == 0)
+  {
+    std::string Commentaire ;
+    // H.1. Le fichier des messages, dans tous les cas
+    Commentaire = "log" ;
+    if ( modeHOMARD == 1 ) { Commentaire += " " + siterp1 ; }
+    else                   { Commentaire += "Info" ; }
+    PublishFileUnderIteration(NomIteration, LogFile.c_str(), Commentaire.c_str());
 
+    // H.2. Si tout s'est bien passe :
+    if (codretexec == 0)
+    {
+    // H.2.1. Le fichier de bilan
+      Commentaire = "Summary" ;
+      if ( modeHOMARD == 1 ) { Commentaire += " " + siterp1 ; }
+      else                   { Commentaire += "Info" ; }
+      PublishFileUnderIteration(NomIteration, FileInfo.c_str(), Commentaire.c_str());
+    // H.2.2. Le fichier de  maillage obtenu
+      if ( modeHOMARD == 1 )
+      {
+        std::stringstream saux0 ;
+        Commentaire = "Mesh" ;
+        Commentaire += " " + siterp1 ;
+        PublishFileUnderIteration(NomIteration, MeshFile, Commentaire.c_str());
+        if ( Option2 % 2 == 0 ) { PublishResultInSmesh(MeshFile, 1); }
+      }
+    }
+  // H.3 Message d'erreur
+    if (codretexec != 0)
+    {
+      std::string text = "" ;
+      // Message d'erreur en cas de probleme en adaptation
+      if ( modeHOMARD == 1 )
+      {
+        text = "Error during the adaptation.\n" ;
+        bool stopvu = false ;
+        std::ifstream fichier( LogFile.c_str() );
+        if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
+        {
+          std::string ligne; // variable contenant chaque ligne lue
+          while ( std::getline( fichier, ligne ) )
+          {
+//             INFOS(ligne);
+            if ( stopvu )
+            { text += ligne+ "\n"; }
+            else
+            {
+              int position = ligne.find( "===== HOMARD ===== STOP =====" ) ;
+              if ( position > 0 ) { stopvu = true ; }
+            }
+          }
+        }
+      }
+      text += "\n\nSee the file " + LogFile + "\n" ;
+      INFOS ( text ) ;
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+//
+      // En mode information, on force le succes pour pouvoir consulter le fichier log
+      if ( modeHOMARD != 1 ) { codretexec = 0 ; }
+    }
+  }
 
+  // I. Menage et retour dans le repertoire du cas
+  if (codret == 0)
+  {
+    delete myDriver;
+    MESSAGE ( ". On retourne dans nomDirWork = " << nomDirWork );
 
+    CHDIR(nomDirWork.c_str());
+  }
 
+  return codretexec ;
+}
 //=============================================================================
-CORBA::Long HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatMenage)
+// Calcul d'une iteration : partie specifique a l'adaptation
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::ComputeAdap(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage, HomardDriver* myDriver, CORBA::Long Option1, CORBA::Long Option2)
 {
-  MESSAGE ( "Compute : calcul de " << nomIteration );
-  IsValidStudy () ;
+  MESSAGE ( "ComputeAdap" );
 
-  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration];
-  ASSERT(!CORBA::is_nil(myIteration));
-
-// on ne calcule pas l iteration 0
+  // A. Prealable
+  // A.1. Bases
+  int codret = 0;
+  // Numero de l'iteration
   int NumeIter = myIteration->GetNumber();
-  if ( NumeIter == 0 )
-  {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "This iteration is the first of the case and cannot be computed.";
-      throw SALOME::SALOME_Exception(es);
-      return 1;
-  };
+  std::stringstream saux0 ;
+  saux0 << NumeIter-1 ;
+  std::string siter = saux0.str() ;
+  if (NumeIter < 11) { siter = "0" + siter ; }
 
-// on verifie qu il y a une hypothese (erreur improbable);
+  // A.2. On verifie qu il y a une hypothese (erreur improbable);
   const char* nomHypo = myIteration->GetHypoName();
   if (std::string(nomHypo) == std::string(""))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text= "This iteration does not have any associated hypothesis.";
+      es.text = "This iteration does not have any associated hypothesis.";
       throw SALOME::SALOME_Exception(es);
       return 2;
-  }
+  };
   HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
   ASSERT(!CORBA::is_nil(myHypo));
 
-
-  // A.4. L'iteration parent
-  const char* nomIterationParent = myIteration->GetIterParent();
+  // B. L'iteration parent
+  const char* nomIterationParent = myIteration->GetIterParentName();
   HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterationParent];
   ASSERT(!CORBA::is_nil(myIterationParent));
-  if ( ! myIterationParent->GetEtat() )
-  {
-      /*
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      std::string text = "The iteration cannot be computed because the previous iteration " + std::string(nomIterationParent) + " is not valid.";
-      es.text = CORBA::string_dup(text.c_str());
-      throw SALOME::SALOME_Exception(es);
-      return 0;
-      */
-      int codret = Compute(nomIterationParent, etatMenage);
-      if (codret != 0)
-      {
-        // GERALD -- QMESSAGE BOX
-        ASSERT("Pb au calcul de l'iteration precedente" == 0);
-      }
-  };
-
-  const char* nomCas = myIteration->GetCaseName();
-  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
-  ASSERT(!CORBA::is_nil(myCase));
-
-  int codret = 0;
-  std::stringstream saux0 ;
-  saux0 << NumeIter - 1 ;
-  std::string siter = saux0.str() ;
-  if (NumeIter < 11) { siter = "0" + siter ; }
-//
-  std::stringstream saux1 ;
-  saux1 << NumeIter ;
-  std::string siterp1 = saux1.str() ;
-  if (NumeIter < 10) { siterp1 = "0" + siterp1 ; }
-
-  // B. Les repertoires
-  // B.1. Le repertoire du cas
-  const char* nomDir = myCase->GetDirName();
-  MESSAGE ( ". nomDir = " << nomDir );
-
-  // B.2. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer
-  // B.2.1. Le nom du sous-repertoire
-   const char* nomDirIt = myIteration->GetDirName();
-
-  // B.2.2. Le nom complet du sous-repertoire
-  std::stringstream DirCompute ;
-  DirCompute << nomDir << "/" << nomDirIt;
-  MESSAGE (". DirCompute = " << DirCompute.str() );
-
-  // B.2.3. Si le sous-repertoire n'existe pas, on le cree
-  //        Si le sous-repertoire existe :
-  //         etatMenage = 0 : on sort en erreur si le repertoire n'est pas vide
-  //         etatMenage = 1 : on fait le menage du repertoire
-  if (chdir(DirCompute.str().c_str()) != 0)
-  {
-//  Creation du repertoire car il n'existe pas :
-    if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
-    {
-       // GERALD -- QMESSAGE BOX
-       std::cerr << "Pb Creation du repertoire DirCompute = " << DirCompute.str() << std::endl;
-       ASSERT("Pb a la creation du repertoire" == 0);
-    }
-  }
-  else
+  // Si l'iteration parent n'est pas calculee, on le fait (recursivite amont)
+  if ( myIterationParent->GetState() == 1 )
   {
-//  Le repertoire existe et on fait le menage de son contenu :
-    if (etatMenage != 0)
-    {
-       MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str());
-       std::string commande= "rm -rf " + DirCompute.str()+"/*" ;
-       int codret = system(commande.c_str());
-       if (codret != 0)
-       {
-         // GERALD -- QMESSAGE BOX
-         std::cerr << ". Menage du repertoire de calcul" << DirCompute.str() << std::endl;
-         ASSERT("Pb au menage du repertoire de calcul" == 0);
-       }
-    }
-    else
+    int iaux = 1 ;
+    int codret = Compute(nomIterationParent, etatMenage, iaux, Option1, Option2);
+    if (codret != 0)
     {
-//  Le repertoire existe et s'il n'est pas vide, on sort en erreur :
-       DIR *dp;
-       struct dirent *dirp;
-       dp  = opendir(DirCompute.str().c_str());
-       bool result = true;
-       while ((dirp = readdir(dp)) != NULL && result )
-       {
-            std::string file_name(dirp->d_name);
-            result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false
-       }
-       closedir(dp);
-       if ( result == false)
-       {
-          SALOME::ExceptionStruct es;
-          es.type = SALOME::BAD_PARAM;
-          std::string text = "Directory : " + DirCompute.str() + "is not empty";
-          es.text = CORBA::string_dup(text.c_str());
-          throw SALOME::SALOME_Exception(es);
-          return 3;
-       }
+      // GERALD -- QMESSAGE BOX
+      VERIFICATION("Pb au calcul de l'iteration precedente" == 0);
     }
-  }
-
-  // B.3. Le sous-repertoire de l'iteration precedente
-  const char* nomDirItPa ;
-  std::stringstream DirComputePa ;
-  if (NumeIter == 1)
-  {
-    nomDirItPa = nomDirIt;
-    DirComputePa << DirCompute.str();
-  }
-  else
-  {
-    nomDirItPa = myIterationParent->GetDirName();
-    DirComputePa << nomDir << "/" << nomDirItPa;
-  }
-  MESSAGE( ". nomDirItPa = " << nomDirItPa);
-  MESSAGE( ". DirComputePa = " << DirComputePa.str() );
-
-  // B.4. Le fichier des messages
-  chdir(DirCompute.str().c_str()) ;
-  std::string MessFile = DirCompute.str() + "/Liste." + siter + ".vers." + siterp1 ;
-  MESSAGE (". MessFile = " << MessFile);
-  myIteration->SetMessFile(MessFile.c_str());
+  };
 
-   // C. On passe dans le repertoire de l'iteration a calculer
-  chdir(DirCompute.str().c_str()) ;
+  // C. Le sous-repertoire de l'iteration precedente
+  char* DirComputePa = ComputeDirPaManagement(myCase, myIteration);
+  MESSAGE( ". DirComputePa = " << DirComputePa );
 
-  // D. Les donnees du calcul HOMARD
+  // D. Les donnees de l'adaptation HOMARD
   // D.1. Le type de conformite
   int ConfType = myCase->GetConfType();
   MESSAGE ( ". ConfType = " << ConfType );
 
-  // D.2. Le maillage n
+  // D.1. Le type externe
+  int ExtType = myCase->GetExtType();
+  MESSAGE ( ". ExtType = " << ExtType );
+
+  // D.3. Le maillage de depart
   const char* NomMeshParent = myIterationParent->GetMeshName();
   MESSAGE ( ". NomMeshParent = " << NomMeshParent );
   const char* MeshFileParent = myIterationParent->GetMeshFile();
   MESSAGE ( ". MeshFileParent = " << MeshFileParent );
 
-  // D.3. Le maillage n+1
-  const char* NomMesh = myIteration->GetMeshName();
-  MESSAGE ( ". NomMesh = " << NomMesh );
+  // D.4. Le maillage associe a l'iteration
   const char* MeshFile = myIteration->GetMeshFile();
   MESSAGE ( ". MeshFile = " << MeshFile );
   FILE *file = fopen(MeshFile,"r");
   if (file != NULL)
   {
-     fclose(file);
-     if (etatMenage == 0)
-     {
-          SALOME::ExceptionStruct es;
-          es.type = SALOME::BAD_PARAM;
-          std::string text = "MeshFile : " + std::string(MeshFile) + " already exists ";
-          es.text = CORBA::string_dup(text.c_str());
-          throw SALOME::SALOME_Exception(es);
-          return 4;
-     }
-     else
-     {
-         std::string commande = "rm -f " + std::string(MeshFile);
-         codret = system(commande.c_str());
-         if (codret != 0)
-         {
-          SALOME::ExceptionStruct es;
-          es.type = SALOME::BAD_PARAM;
-          std::string text = "PB with meshfile destruction ";
-          es.text = CORBA::string_dup(text.c_str());
-          throw SALOME::SALOME_Exception(es);
-          return 5;
-         }
+    fclose(file);
+    if (etatMenage == 0)
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "MeshFile : " + std::string(MeshFile) + " already exists ";
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+      return 4;
+    }
+    else
+    {
+      std::string commande = "rm -f " + std::string(MeshFile);
+      codret = system(commande.c_str());
+      if (codret != 0)
+      {
+        SALOME::ExceptionStruct es;
+        es.type = SALOME::BAD_PARAM;
+        es.text = "The mesh file cannot be deleted.";
+        throw SALOME::SALOME_Exception(es);
+        return 5;
       }
+    }
   }
-  else
-  {
-     codret = 0 ;
-  };
 
-
-  // D.4. Les types de raffinement et de deraffinement
+  // D.5. Les types de raffinement et de deraffinement
   // Les appels corba sont lourds, il vaut mieux les grouper
   HOMARD::listeTypes* ListTypes = myHypo->GetAdapRefinUnRef();
   ASSERT(ListTypes->length() == 3);
   int TypeAdap = (*ListTypes)[0];
   int TypeRaff = (*ListTypes)[1];
   int TypeDera = (*ListTypes)[2];
-
-  // D.6. L'option d'interpolation des champs
-  int TypeFieldInterp = myHypo->GetTypeFieldInterp();
+//   MESSAGE ( ". TypeAdap = " << TypeAdap << ", TypeRaff = " << TypeRaff << ", TypeDera = " << TypeDera  );
 
   // E. Texte du fichier de configuration
   // E.1. Incontournables du texte
-  HomardDriver* myDriver = new HomardDriver(siter, siterp1);
-  myDriver->TexteInit(DirCompute.str(), DirComputePa.str(),MessFile);
+  myDriver->TexteAdap(ExtType);
+  int iaux = 0 ;
+  myDriver->TexteMaillageHOMARD( DirComputePa, siter, iaux ) ;
   myDriver->TexteMaillage(NomMeshParent, MeshFileParent, 0);
-  myDriver->TexteMaillage(NomMesh, MeshFile, 1);
   myDriver->TexteConfRaffDera(ConfType, TypeAdap, TypeRaff, TypeDera);
 
   // E.2. Ajout des informations liees aux zones eventuelles
-  if (TypeAdap == 0)
+  if ( TypeAdap == 0 )
+  { DriverTexteZone(myHypo, myDriver) ; }
+
+  // E.3. Ajout des informations liees aux champs eventuels
+  if ( TypeAdap == 1 )
+  { DriverTexteField(myIteration, myHypo, myDriver) ; }
+
+  // E.4. Ajout des informations liees au filtrage eventuel par les groupes
+  HOMARD::ListGroupType* listeGroupes = myHypo->GetGroups();
+  int numberOfGroups = listeGroupes->length();
+  MESSAGE( ". Filtrage par " << numberOfGroups << " groupes");
+  if (numberOfGroups > 0)
   {
-    HOMARD::listeZonesHypo* ListZone = myHypo->GetZones();
-    int numberOfZonesx2 = ListZone->length();
-    int NumZone ;
+    for (int NumGroup = 0; NumGroup< numberOfGroups; NumGroup++)
+    {
+      std::string GroupName = std::string((*listeGroupes)[NumGroup]);
+      MESSAGE( "... GroupName = " << GroupName );
+      myDriver->TexteGroup(GroupName);
+    }
+  }
+
+  // E.5. Ajout des informations liees a l'eventuelle interpolation des champs
+  DriverTexteFieldInterp(myIteration, myHypo, myDriver) ;
+
+  // E.6. Ajout des options avancees
+  int Pyram = myCase->GetPyram();
+  MESSAGE ( ". Pyram = " << Pyram );
+  int NivMax = myHypo->GetNivMax();
+  MESSAGE ( ". NivMax = " << NivMax );
+  double DiamMin = myHypo->GetDiamMin() ;
+  MESSAGE ( ". DiamMin = " << DiamMin );
+  int AdapInit = myHypo->GetAdapInit();
+  MESSAGE ( ". AdapInit = " << AdapInit );
+  int ExtraOutput = myHypo->GetExtraOutput();
+  MESSAGE ( ". ExtraOutput = " << ExtraOutput );
+  myDriver->TexteAdvanced(Pyram, NivMax, DiamMin, AdapInit, ExtraOutput);
 
-    for (int iaux = 0; iaux< numberOfZonesx2; iaux++)
+  // E.7. Ajout des informations sur le deroulement de l'execution
+  int MessInfo = myIteration->GetInfoCompute();
+  MESSAGE ( ". MessInfo = " << MessInfo );
+  myDriver->TexteInfoCompute(MessInfo);
+
+  return codret ;
+}
+//=============================================================================
+// Creation d'un nom de sous-repertoire pour l'iteration au sein d'un repertoire parent
+//  nomrep : nom du repertoire parent
+//  num : le nom du sous-repertoire est sous la forme 'In', n est >= num
+//=============================================================================
+char* HOMARD_Gen_i::CreateDirNameIter(const char* nomrep, CORBA::Long num )
+{
+  MESSAGE ( "CreateDirNameIter : nomrep ="<< nomrep << ", num = "<<num);
+  // On verifie que le repertoire parent existe
+  int codret = CHDIR(nomrep) ;
+  if ( codret != 0 )
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory of the case does not exist.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+  std::string nomDirActuel = getenv("PWD") ;
+  std::string DirName ;
+  // On boucle sur tous les noms possibles jusqu'a trouver un nom correspondant a un repertoire inconnu
+  bool a_chercher = true ;
+  while ( a_chercher )
+  {
+    // On passe dans le repertoire parent
+
+    CHDIR(nomrep);
+    // On recherche un nom sous la forme Iabc, avec abc representant le numero
+    int jaux ;
+    if      ( num <    100 ) { jaux = 2 ; }
+    else if ( num <   1000 ) { jaux = 3 ; }
+    else if ( num <  10000 ) { jaux = 4 ; }
+    else if ( num < 100000 ) { jaux = 5 ; }
+    else                     { jaux = 9 ; }
+    std::ostringstream iaux ;
+    iaux << std::setw(jaux) << std::setfill('0') << num ;
+    std::ostringstream DirNameA ;
+    DirNameA << "I" << iaux.str();
+    // Si on ne pas peut entrer dans le repertoire, on doit verifier
+    // que c'est bien un probleme d'absence
+    if ( CHDIR(DirNameA.str().c_str()) != 0 )
     {
-      std::string ZoneName = std::string((*ListZone)[iaux]);
-      MESSAGE ( "... ZoneName = " << ZoneName);
-      HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
-      ASSERT(!CORBA::is_nil(myZone));
-
-      int ZoneType = myZone->GetZoneType();
-      std::string TypeUsestr = std::string((*ListZone)[iaux+1]);
-      int TypeUse = atoi( TypeUsestr.c_str() );
-      MESSAGE ( "... ZoneType = " << ZoneType << ", TypeUse = "<<TypeUse);
-      NumZone = iaux/2 + 1 ;
-      HOMARD::double_array* zone = myZone->GetCoords();
-      if ( ZoneType == 2 or ( ZoneType>=11 and ZoneType <=13 ) ) // Cas d un parallelepipede ou d'un rectangle
+      bool existe = false ;
+#ifndef WIN32
+      DIR *dp;
+      struct dirent *dirp;
+      dp  = opendir(nomrep);
+      while ( (dirp = readdir(dp)) != NULL )
       {
-        myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], 0., 0., 0.);
+        std::string file_name(dirp->d_name);
+#else
+      HANDLE hFind = INVALID_HANDLE_VALUE;
+      WIN32_FIND_DATA ffd;
+      hFind = FindFirstFile(nomrep, &ffd);
+      if (INVALID_HANDLE_VALUE != hFind) {
+        while (FindNextFile(hFind, &ffd) != 0) {
+         if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+         std::string file_name(ffd.cFileName);
+#endif
+        if ( file_name == DirNameA.str() ) { existe = true ; }
       }
-      else if ( ZoneType == 4 ) // Cas d une sphere
+#ifndef WIN32
+      closedir(dp);
+#else
+      FindClose(hFind);
+#endif
+      if ( !existe )
       {
-        myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0., 0., 0., 0.);
+        DirName = DirNameA.str() ;
+        a_chercher = false ;
+        break ;
       }
-      else if ( ZoneType == 5 or ( ZoneType>=31 and ZoneType <=33 ) ) // Cas d un cylindre ou d'un disque
+    }
+    num += 1;
+  }
+
+  MESSAGE ( "==> DirName = " << DirName);
+  MESSAGE ( ". On retourne dans nomDirActuel = " << nomDirActuel );
+  CHDIR(nomDirActuel.c_str());
+  return CORBA::string_dup( DirName.c_str() );
+}
+//=============================================================================
+// Calcul d'une iteration : gestion du repertoire de calcul
+//        Si le sous-repertoire existe :
+//         etatMenage =  0 : on sort en erreur si le repertoire n'est pas vide
+//         etatMenage =  1 : on fait le menage du repertoire
+//         etatMenage = -1 : on ne fait rien
+//=============================================================================
+char* HOMARD_Gen_i::ComputeDirManagement(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage)
+{
+  MESSAGE ( "ComputeDirManagement : repertoires pour le calcul" );
+  // B.2. Le repertoire du cas
+  const char* nomDirCase = myCase->GetDirName();
+  MESSAGE ( ". nomDirCase = " << nomDirCase );
+
+  // B.3. Le sous-repertoire de l'iteration a calculer, puis le repertoire complet a creer
+  // B.3.1. Le nom du sous-repertoire
+  const char* nomDirIt = myIteration->GetDirNameLoc();
+
+  // B.3.2. Le nom complet du sous-repertoire
+  std::stringstream DirCompute ;
+  DirCompute << nomDirCase << "/" << nomDirIt;
+  MESSAGE (". DirCompute = " << DirCompute.str() );
+
+  // B.3.3. Si le sous-repertoire n'existe pas, on le cree
+  if (CHDIR(DirCompute.str().c_str()) != 0)
+  {
+#ifndef WIN32
+    if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
+#else
+    if (_mkdir(DirCompute.str().c_str()) != 0)
+#endif
+    {
+       // GERALD -- QMESSAGE BOX
+       std::cerr << "Pb Creation du repertoire DirCompute = " << DirCompute.str() << std::endl;
+       VERIFICATION("Pb a la creation du repertoire" == 0);
+    }
+  }
+  else
+  {
+//  Le repertoire existe
+//  On demande de faire le menage de son contenu :
+    if (etatMenage == 1)
+    {
+      MESSAGE (". Menage du repertoire DirCompute = " << DirCompute.str());
+      std::string commande = "rm -rf " + DirCompute.str()+"/*" ;
+      int codret = system(commande.c_str());
+      if (codret != 0)
       {
-        myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], 0.);
+        // GERALD -- QMESSAGE BOX
+        std::cerr << ". Menage du repertoire de calcul" << DirCompute.str() << std::endl;
+        VERIFICATION("Pb au menage du repertoire de calcul" == 0);
       }
-      else if ( ZoneType == 7 or ( ZoneType>=61 and ZoneType <=63 ) ) // Cas d un tuyau ou disque perce
+    }
+//  On n'a pas demande de faire le menage de son contenu : on sort en erreur :
+    else
+    {
+      if (etatMenage == 0)
       {
-        myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], (*zone)[8]);
+#ifndef WIN32
+        DIR *dp;
+        struct dirent *dirp;
+        dp  = opendir(DirCompute.str().c_str());
+        bool result = true;
+        while ((dirp = readdir(dp)) != NULL && result )
+        {
+          std::string file_name(dirp->d_name);
+          result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false
+        }
+        closedir(dp);
+#else
+       HANDLE hFind = INVALID_HANDLE_VALUE;
+       WIN32_FIND_DATA ffd;
+       hFind = FindFirstFile(DirCompute.str().c_str(), &ffd);
+       bool result = true;
+       if (INVALID_HANDLE_VALUE != hFind) {
+         while (FindNextFile(hFind, &ffd) != 0) {
+          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+          std::string file_name(ffd.cFileName);
+          result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false
+         }
+       }
+       FindClose(hFind);
+#endif
+        if ( result == false)
+        {
+          SALOME::ExceptionStruct es;
+          es.type = SALOME::BAD_PARAM;
+          std::string text = "Directory : " + DirCompute.str() + " is not empty";
+          es.text = CORBA::string_dup(text.c_str());
+          throw SALOME::SALOME_Exception(es);
+          VERIFICATION("Directory is not empty" == 0);
+        }
       }
-      else { ASSERT("ZoneType est incorrect." == 0) ; }
-      iaux += 1 ;
     }
   }
-  // E.3. Ajout des informations liees aux champs eventuels
-  if (TypeAdap == 1)
+
+  return CORBA::string_dup( DirCompute.str().c_str() );
+}
+//=============================================================================
+// Calcul d'une iteration : gestion du repertoire de calcul de l'iteration parent
+//=============================================================================
+char* HOMARD_Gen_i::ComputeDirPaManagement(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration)
+{
+  MESSAGE ( "ComputeDirPaManagement : repertoires pour le calcul" );
+  // Le repertoire du cas
+  const char* nomDirCase = myCase->GetDirName();
+  MESSAGE ( ". nomDirCase = " << nomDirCase );
+
+  // Le sous-repertoire de l'iteration precedente
+
+  const char* nomIterationParent = myIteration->GetIterParentName();
+  HOMARD::HOMARD_Iteration_var myIterationParent = myContextMap[GetCurrentStudyID()]._mesIterations[nomIterationParent];
+  const char* nomDirItPa = myIterationParent->GetDirNameLoc();
+  std::stringstream DirComputePa ;
+  DirComputePa << nomDirCase << "/" << nomDirItPa;
+  MESSAGE( ". nomDirItPa = " << nomDirItPa);
+  MESSAGE( ". DirComputePa = " << DirComputePa.str() );
+
+  return CORBA::string_dup( DirComputePa.str().c_str() );
+}
+//=============================================================================
+// Calcul d'une iteration : ecriture des zones dans le fichier de configuration
+//=============================================================================
+void HOMARD_Gen_i::DriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver)
+{
+  MESSAGE ( "... DriverTexteZone" );
+  HOMARD::listeZonesHypo* ListZone = myHypo->GetZones();
+  int numberOfZonesx2 = ListZone->length();
+  int NumZone ;
+
+  for (int iaux = 0; iaux< numberOfZonesx2; iaux++)
   {
+    std::string ZoneName = std::string((*ListZone)[iaux]);
+    MESSAGE ( "... ZoneName = " << ZoneName);
+    HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
+    ASSERT(!CORBA::is_nil(myZone));
+
+    int ZoneType = myZone->GetType();
+    std::string TypeUsestr = std::string((*ListZone)[iaux+1]);
+    int TypeUse = atoi( TypeUsestr.c_str() );
+    MESSAGE ( "... ZoneType = " << ZoneType << ", TypeUse = "<<TypeUse);
+    NumZone = iaux/2 + 1 ;
+    HOMARD::double_array* zone = myZone->GetCoords();
+    if ( ZoneType == 2 || ( ZoneType>=11 && ZoneType <=13 ) ) // Cas d un parallelepipede ou d'un rectangle
+    { myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], 0., 0., 0.); }
+    else if ( ZoneType == 4 ) // Cas d une sphere
+    { myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], 0., 0., 0., 0., 0.); }
+    else if ( ZoneType == 5 || ( ZoneType>=31 && ZoneType <=33 ) ) // Cas d un cylindre ou d'un disque
+    { myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], 0.); }
+    else if ( ZoneType == 7 || ( ZoneType>=61 && ZoneType <=63 ) ) // Cas d un tuyau ou disque perce
+    { myDriver->TexteZone(NumZone, ZoneType, TypeUse, (*zone)[0], (*zone)[1], (*zone)[2], (*zone)[3], (*zone)[4], (*zone)[5], (*zone)[6], (*zone)[7], (*zone)[8]); }
+    else { VERIFICATION("ZoneType est incorrect." == 0) ; }
+    iaux += 1 ;
+  }
+  return ;
+}
+//=============================================================================
+// Calcul d'une iteration : ecriture des champs dans le fichier de configuration
+//=============================================================================
+void HOMARD_Gen_i::DriverTexteField(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver)
+{
+  MESSAGE ( "... DriverTexteField" );
 //  Le fichier du champ
-    char* FieldFile = myIteration->GetFieldFile();
-    MESSAGE ( ". FieldFile = " << FieldFile );
-    if (strlen(FieldFile) == 0)
-    {
-      // GERALD -- QMESSAGE BOX
-      std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl;
-      ASSERT("The file for the field is not given." == 0);
-    }
-//  Les caracteristiques d'instants
-    int TimeStep = myIteration->GetTimeStep();
-    MESSAGE( ". TimeStep = " << TimeStep );
-    int Rank = myIteration->GetRank();
-    MESSAGE( ". Rank = " << Rank );
-//  Les informations sur les champ
-    HOMARD::InfosHypo* aInfosHypo = myHypo->GetField();
+  char* FieldFile = myIteration->GetFieldFile();
+  MESSAGE ( ". FieldFile = " << FieldFile );
+  if (strlen(FieldFile) == 0)
+  {
+    // GERALD -- QMESSAGE BOX
+    std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl;
+    VERIFICATION("The file for the field is not given." == 0);
+  }
+//  Les caracteristiques d'instants du champ de pilotage
+  int TimeStep = myIteration->GetTimeStep();
+  MESSAGE( ". TimeStep = " << TimeStep );
+  int Rank = myIteration->GetRank();
+  MESSAGE( ". Rank = " << Rank );
+//  Les informations sur les champs
+  HOMARD::InfosHypo* aInfosHypo = myHypo->GetField();
 //  Le nom
-    const char* FieldName = aInfosHypo->FieldName;
+  const char* FieldName = aInfosHypo->FieldName;
 //  Les seuils
-    int TypeThR = aInfosHypo->TypeThR;
-    double ThreshR = aInfosHypo->ThreshR;
-    int TypeThC = aInfosHypo->TypeThC;
-    double ThreshC = aInfosHypo->ThreshC;
+  int TypeThR = aInfosHypo->TypeThR;
+  double ThreshR = aInfosHypo->ThreshR;
+  int TypeThC = aInfosHypo->TypeThC;
+  double ThreshC = aInfosHypo->ThreshC;
 //  Saut entre mailles ou non ?
-    int UsField = aInfosHypo->UsField;
-    MESSAGE( ". UsField = " << UsField );
+  int UsField = aInfosHypo->UsField;
+  MESSAGE( ". UsField = " << UsField );
 //  L'usage des composantes
-    int UsCmpI = aInfosHypo->UsCmpI;
-    MESSAGE( ". UsCmpI = " << UsCmpI );
+  int UsCmpI = aInfosHypo->UsCmpI;
+  MESSAGE( ". UsCmpI = " << UsCmpI );
 //
-    myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsField, UsCmpI);
+  myDriver->TexteField(FieldName, FieldFile, TimeStep, Rank, TypeThR, ThreshR, TypeThC, ThreshC, UsField, UsCmpI);
 //
 //  Les composantes
-    HOMARD::listeComposantsHypo* mescompo = myHypo->GetListComp();
-    int numberOfCompos = mescompo->length();
-    MESSAGE( ". numberOfCompos = " << numberOfCompos );
-    for (int NumeComp = 0; NumeComp< numberOfCompos; NumeComp++)
+  HOMARD::listeComposantsHypo* mescompo = myHypo->GetComps();
+  int numberOfCompos = mescompo->length();
+  MESSAGE( ". numberOfCompos = " << numberOfCompos );
+  for (int NumeComp = 0; NumeComp< numberOfCompos; NumeComp++)
+  {
+    std::string nomCompo = std::string((*mescompo)[NumeComp]);
+    if ((system(nomCompo.c_str())) != 0)
     {
-      std::string nomCompo = std::string((*mescompo)[NumeComp]);
       MESSAGE( "... nomCompo = " << nomCompo );
       myDriver->TexteCompo(NumeComp, nomCompo);
     }
   }
-  // E.4. Ajout des informations liees au filtrage eventuel par les groupes
-  HOMARD::ListGroupType* listeGroupes = myHypo->GetGroups();
-  int numberOfGroups = listeGroupes->length();
-  MESSAGE( ". numberOfGroups = " << numberOfGroups );
-  if (numberOfGroups > 0)
-  {
-
-    for (int NumGroup = 0; NumGroup< numberOfGroups; NumGroup++)
-    {
-      std::string GroupName = std::string((*listeGroupes)[NumGroup]);
-      MESSAGE( "... GroupName = " << GroupName );
-      myDriver->TexteGroup(GroupName);
-    }
-  }
-
-  // E.5. Ajout des informations liees a l'eventuel suivi de frontiere
-  // On ecrit d'abord la definition des frontieres, puis les liens avec les groupes
+  return ;
+}
+//=============================================================================
+// Calcul d'une iteration : ecriture des frontieres dans le fichier de configuration
+// On ecrit dans l'ordre :
+//    1. la definition des frontieres
+//    2. les liens avec les groupes
+//    3. un entier resumant le type de comportement pour les frontieres
+//=============================================================================
+void HOMARD_Gen_i::DriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, HomardDriver* myDriver)
+{
+  MESSAGE ( "... DriverTexteBoundary" );
+  // 1. Recuperation des frontieres
   std::list<std::string>  ListeBoundaryTraitees ;
   HOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup();
   int numberOfitems = ListBoundaryGroupType->length();
   MESSAGE ( "... number of string for Boundary+Group = " << numberOfitems);
   int BoundaryOption = 1 ;
+  // 2. Parcours des frontieres pour ecrire leur description
   int NumBoundaryAnalytical = 0 ;
   for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
   {
     std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]);
     MESSAGE ( "... BoundaryName = " << BoundaryName);
+    // 2.1. La frontiere a-t-elle deja ete ecrite ?
+    //      Cela arrive quand elle est liee a plusieurs groupes. Il ne faut l'ecrire que la premiere fois
     int A_faire = 1 ;
     std::list<std::string>::const_iterator it = ListeBoundaryTraitees.begin();
     while (it != ListeBoundaryTraitees.end())
     {
-      MESSAGE ( "... BoundaryNameTraitee = " << *it);
+      MESSAGE ( "..... BoundaryNameTraitee = " << *it);
       if ( BoundaryName == *it ) { A_faire = 0 ; }
       it++;
     }
+    // 2.2. Ecriture de la frontiere
     if ( A_faire == 1 )
     {
-// Caracteristiques de la frontiere
+      // 2.2.1. Caracteristiques de la frontiere
       HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
       ASSERT(!CORBA::is_nil(myBoundary));
-      int BoundaryType = myBoundary->GetBoundaryType();
+      int BoundaryType = myBoundary->GetType();
       MESSAGE ( "... BoundaryType = " << BoundaryType );
-// Ecriture selon le type
-      if (BoundaryType == 0) // Cas d une frontiere discrete
+      // 2.2.2. Ecriture selon le type
+      // 2.2.2.1. Cas d une frontiere discrete
+      if (BoundaryType == 0)
       {
         const char* MeshName = myBoundary->GetMeshName() ;
+        MESSAGE ( ". MeshName = " << MeshName );
         const char* MeshFile = myBoundary->GetMeshFile() ;
+        MESSAGE ( ". MeshFile = " << MeshFile );
         myDriver->TexteBoundaryDi( MeshName, MeshFile);
-        BoundaryOption = BoundaryOption*2 ;
+        if ( BoundaryOption % 2 != 0 ) { BoundaryOption = BoundaryOption*2 ; }
       }
-      else // Cas d une frontiere analytique
+      // 2.2.2.1. Cas d une frontiere analytique
+      else
       {
         NumBoundaryAnalytical++ ;
         HOMARD::double_array* coor = myBoundary->GetCoords();
         if (BoundaryType == 1) // Cas d un cylindre
         {
-          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6]);
-          BoundaryOption = BoundaryOption*3 ;
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.);
+          if ( BoundaryOption % 3 != 0 ) { BoundaryOption = BoundaryOption*3 ; }
+        }
+        else if (BoundaryType == 2) // Cas d une sphere
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0., 0.);
+          if ( BoundaryOption % 3 != 0 ) { BoundaryOption = BoundaryOption*3 ; }
+        }
+        else if (BoundaryType == 3) // Cas d un cone defini par un axe et un angle
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.);
+          if ( BoundaryOption % 3 != 0 ) { BoundaryOption = BoundaryOption*3 ; }
         }
-        else if (BoundaryType == 2) // Cas d une sphere
+        else if (BoundaryType == 4) // Cas d un cone defini par les 2 rayons
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]);
+          if ( BoundaryOption % 3 != 0 ) { BoundaryOption = BoundaryOption*3 ; }
+        }
+        else if (BoundaryType == 5) // Cas d un tore
         {
-          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0.);
-          BoundaryOption = BoundaryOption*3 ;
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]);
+          if ( BoundaryOption % 3 != 0 ) { BoundaryOption = BoundaryOption*3 ; }
         }
       }
-// Memorisation du traitement
+      // 2.2.3. Memorisation du traitement
       ListeBoundaryTraitees.push_back( BoundaryName );
     }
   }
+  // 3. Parcours des frontieres pour ecrire les liens avec les groupes
   NumBoundaryAnalytical = 0 ;
   for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
   {
@@ -1390,25 +3185,36 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatMena
     MESSAGE ( "... BoundaryName = " << BoundaryName);
     HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
     ASSERT(!CORBA::is_nil(myBoundary));
-    int BoundaryType = myBoundary->GetBoundaryType();
+    int BoundaryType = myBoundary->GetType();
     MESSAGE ( "... BoundaryType = " << BoundaryType );
-//  Recuperation du nom du groupe
+    // 3.1. Recuperation du nom du groupe
     std::string GroupName = std::string((*ListBoundaryGroupType)[NumBoundary+1]);
     MESSAGE ( "... GroupName = " << GroupName);
-    if (BoundaryType == 0) // Cas d une frontiere discrete
+    // 3.2. Cas d une frontiere discrete
+    if ( BoundaryType == 0 )
     {
       if ( GroupName.size() > 0 ) { myDriver->TexteBoundaryDiGr ( GroupName ) ; }
     }
-    else // Cas d une frontiere analytique
+    // 3.3. Cas d une frontiere analytique
+    else
     {
       NumBoundaryAnalytical++ ;
       myDriver->TexteBoundaryAnGr ( BoundaryName, NumBoundaryAnalytical, GroupName ) ;
     }
   }
+  // 4. Ecriture de l'option finale
   myDriver->TexteBoundaryOption(BoundaryOption);
-
-  // E.6. Ajout des informations liees a l'eventuelle interpolation des champs
-  MESSAGE( "... TypeFieldInterp = " << TypeFieldInterp );
+//
+  return ;
+}
+//=============================================================================
+// Calcul d'une iteration : ecriture des interpolations dans le fichier de configuration
+//=============================================================================
+void HOMARD_Gen_i::DriverTexteFieldInterp(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver)
+{
+  MESSAGE ( "... DriverTexteFieldInterp" );
+  int TypeFieldInterp = myHypo->GetTypeFieldInterp();
+  MESSAGE ( "... TypeFieldInterp = " << TypeFieldInterp);
   if (TypeFieldInterp != 0)
   {
 //  Le fichier des champs
@@ -1417,118 +3223,81 @@ CORBA::Long HOMARD_Gen_i::Compute(const char* nomIteration, CORBA::Long etatMena
     if (strlen(FieldFile) == 0)
     {
       // GERALD -- QMESSAGE BOX
-      std::cerr << "Le fichier du champ n'a pas ete fourni." << std::endl;
-      ASSERT("The file for the field is not given." == 0);
-    }
-//  Les caracteristiques d'instants
-    int TimeStep = myIteration->GetTimeStep();
-    MESSAGE( ". TimeStep = " << TimeStep );
-    int Rank = myIteration->GetRank();
-    MESSAGE( ". Rank = " << Rank );
-//
-    myDriver->TexteFieldInterp(TypeFieldInterp, FieldFile, MeshFile, TimeStep, Rank);
-//  Les champs
-    if (TypeFieldInterp == 2)
-    {
-      HOMARD::listFieldInterpHypo* meschamps = myHypo->GetListFieldInterp();
-      int numberOfFields = meschamps->length();
-      MESSAGE( ". numberOfFields = " << numberOfFields );
-      for (int NumeChamp = 0; NumeChamp< numberOfFields; NumeChamp++)
-      {
-        std::string nomChamp = std::string((*meschamps)[NumeChamp]);
-        MESSAGE( "... nomChamp = " << nomChamp );
-        myDriver->TexteFieldInterpName(NumeChamp, nomChamp);
-      }
-    }
-  }
-  // E.7. Ajout des options avancees
-  int Pyram = myCase->GetPyram();
-  MESSAGE ( ". Pyram = " << Pyram );
-  int NivMax = myHypo->GetNivMax();
-  MESSAGE ( ". NivMax = " << NivMax );
-  double DiamMin = myHypo->GetDiamMin() ;
-  MESSAGE ( ". DiamMin = " << DiamMin );
-  int AdapInit = myHypo->GetAdapInit();
-  MESSAGE ( ". AdapInit = " << AdapInit );
-  myDriver->TexteAdvanced(Pyram, NivMax, DiamMin, AdapInit);
-
-  // F. Ecriture du texte dans le fichier
-  if (codret == 0)
-  {
-    myDriver->CreeFichier();
-  }
-
-// G. Execution
-//
-  int codretexec = 12 ;
-  if (codret == 0)
-  {
-    codretexec = myDriver->ExecuteHomard();
-//
-    MESSAGE ( "Erreur en executant HOMARD : " << codretexec );
-    if (codretexec == 0)
-    {
-      SetEtatIter(nomIteration,true);
-    }
-    else
-    {
-      // GERALD -- QMESSAGE BOX
-      SetEtatIter(nomIteration,false);
+      VERIFICATION("The file for the field is not given." == 0);
     }
-  }
-
-  // H. Gestion des resultats
-  if (codret == 0)
-  {
-    // H.1. Le fichier des messages, dans tous les cas
-    std::stringstream saux1 ;
-    saux1 << "Mess " << NumeIter ;
-    PublishFileUnderIteration(nomIteration, MessFile.c_str(), saux1.str().c_str());
+  //
+    const char* MeshFile = myIteration->GetMeshFile();
+    myDriver->TexteFieldInterp(FieldFile, MeshFile);
 
-    // H.2. Si tout s'est bien passe :
-    if (codretexec == 0)
+  // Les champs
+  // Interpolation de tous les champs
+    if ( TypeFieldInterp == 1 )
     {
-    // H.2.1. Le fichier de bilan
-      std::stringstream saux2 ;
-      saux2 << "Summary " << NumeIter ;
-      std::string SummaryFile = DirCompute.str() + "/apad." + siterp1 + ".bilan" ;
-      PublishFileUnderIteration(nomIteration, SummaryFile.c_str(), saux2.str().c_str());
-    // H.2.2. Le fichier de  maillage obtenu
-      std::stringstream saux0 ;
-      saux0 <<"Iteration " << NumeIter ;
-      PublishFileUnderIteration(nomIteration, MeshFile, saux0.str().c_str());
-      PublishResultInSmesh(MeshFile, 1);
+      myDriver->TexteFieldInterpAll();
     }
-  // H.3 Message d'erreur en cas de probleme
-    else
+  // Interpolation de certains champs
+    else if (TypeFieldInterp == 2)
     {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      std::string text = "Error during the adaptation.\n" ;
-      try
+      // Les champs et leurs instants pour l'iteration
+      HOMARD::listeFieldInterpTSRsIter* ListFieldTSR = myIteration->GetFieldInterpsTimeStepRank();
+      int numberOfFieldsx3 = ListFieldTSR->length();
+      MESSAGE( ". pour iteration, numberOfFields = " << numberOfFieldsx3/3 );
+      // Les champs pour l'hypothese
+      HOMARD::listeFieldInterpsHypo* ListField = myHypo->GetFieldInterps();
+      int numberOfFieldsx2 = ListField->length();
+      MESSAGE( ". pour hypothese, numberOfFields = " << numberOfFieldsx2/2 );
+      // On parcourt tous les champs de  l'hypothese
+      int NumField = 0 ;
+      for (int iaux = 0; iaux< numberOfFieldsx2; iaux++)
       {
-          ifstream fichier(MessFile.c_str(), ios::in);
-          string ligne;
-          while(getline(fichier, ligne) and (ligne != "===== HOMARD ===== STOP ====="));
-          while (getline(fichier, ligne)) { text += ligne+ "\n";};
-      }
-      catch (...) {
-        text += "no log file ....";
+        // Le nom du champ
+        std::string FieldName = std::string((*ListField)[iaux]) ;
+        // Le type d'interpolation
+        std::string TypeInterpstr = std::string((*ListField)[iaux+1]) ;
+        MESSAGE( "... FieldName = " << FieldName << ", TypeInterp = " << TypeInterpstr );
+        // On cherche à savoir si des instants ont été précisés pour cette itération
+        int tsrvu = 0;
+        for (int jaux = 0; jaux< numberOfFieldsx3; jaux++)
+        {
+        // Le nom du champ
+          std::string FieldName2 = std::string((*ListFieldTSR)[jaux]) ;
+          MESSAGE( "..... FieldName2 = " << FieldName2 );
+        // Quand c'est le bon champ, on ecrit le pas de temps
+          if ( FieldName == FieldName2 )
+          {
+            tsrvu = 1 ;
+            // Le pas de temps
+            std::string TimeStepstr = std::string((*ListFieldTSR)[jaux+1]) ;
+            // Le numero d'ordre
+            std::string Rankstr = std::string((*ListFieldTSR)[jaux+2]) ;
+            MESSAGE( "..... TimeStepstr = " << TimeStepstr <<", Rankstr = "<<Rankstr );
+            NumField += 1 ;
+            int TimeStep = atoi( TimeStepstr.c_str() );
+            int Rank = atoi( Rankstr.c_str() );
+            myDriver->TexteFieldInterpNameType(NumField, FieldName, TypeInterpstr, TimeStep, Rank);
+          }
+          jaux += 2 ;
+        }
+        // Si aucun instant n'a été défini
+        if ( tsrvu == 0 )
+        {
+          NumField += 1 ;
+          myDriver->TexteFieldInterpNameType(NumField, FieldName, TypeInterpstr, -1, -1);
+        }
+        iaux++ ;
       }
-      es.text = CORBA::string_dup(text.c_str());
-      throw SALOME::SALOME_Exception(es);
     }
   }
-
-  // I. Menage
-  if (codret == 0)
-  {
-    delete myDriver;
-  }
-  //
-  return codretexec ;
+  return ;
 }
+//===========================================================================
+//===========================================================================
 
+
+//===========================================================================
+//===========================================================================
+// Publications
+//===========================================================================
 //===========================================================================
 SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
                                                    SALOMEDS::SObject_ptr theSObject,
@@ -1541,66 +3310,145 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
   {
     SALOME::ExceptionStruct es;
     es.type = SALOME::BAD_PARAM;
-    es.text = "Invalid Study Context ";
+    es.text = "Invalid study context";
     throw SALOME::SALOME_Exception(es);
     return 0;
   };
 
 // Recuperation de l'objet correspondant, en essayant chacun des types possibles
 // Rq : Iteration est publiee ailleurs
+  HOMARD::HOMARD_Boundary_var   aBoundary = HOMARD::HOMARD_Boundary::_narrow(theObject);
   HOMARD::HOMARD_Cas_var        aCase  = HOMARD::HOMARD_Cas::_narrow(theObject);
   HOMARD::HOMARD_Hypothesis_var aHypo = HOMARD::HOMARD_Hypothesis::_narrow(theObject);
+  HOMARD::HOMARD_YACS_var       aYACS = HOMARD::HOMARD_YACS::_narrow(theObject);
   HOMARD::HOMARD_Zone_var       aZone = HOMARD::HOMARD_Zone::_narrow(theObject);
-  HOMARD::HOMARD_Boundary_var   aBoundary = HOMARD::HOMARD_Boundary::_narrow(theObject);
 
    addInStudy(theStudy);
 
 // Controle de la non publication d'un objet de meme nom
-   if ((!aHypo->_is_nil()) or (!aZone->_is_nil()) or (!aBoundary->_is_nil()))
+   if ( (!aBoundary->_is_nil()) || (!aHypo->_is_nil()) || (!aYACS->_is_nil()) || (!aZone->_is_nil()) )
+  {
+    SALOMEDS::Study::ListOfSObject_var listSO = theStudy->FindObjectByName(theName, ComponentDataType());
+    if (listSO->length() >= 1)
     {
-      SALOMEDS::Study::ListOfSObject_var listSO = theStudy->FindObjectByName(theName, ComponentDataType());
-      if (listSO->length() >= 1)
-      {
-          MESSAGE("This name "<<theName<<" is already used "<<listSO->length()<<" time(s)");
-          std::cerr <<"This name "<<theName<<" is already used "<<listSO->length()<<" time(s)" << std::endl;
-          aResultSO = listSO[0];
-          return aResultSO._retn();
-      }
+      MESSAGE("This name "<<theName<<" is already used "<<listSO->length()<<" time(s)");
+      aResultSO = listSO[0];
+      return aResultSO._retn();
     }
+  }
 
   // Caracteristiques de l'etude
   SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
   aStudyBuilder->NewCommand();
-  if(!aCase->_is_nil())
+  if(!aBoundary->_is_nil())
+    aResultSO = PublishBoundaryInStudy(theStudy, aStudyBuilder, aBoundary, theName);
+  else if(!aCase->_is_nil())
     aResultSO = PublishCaseInStudy(theStudy, aStudyBuilder, aCase, theName);
   else if(!aHypo->_is_nil())
     aResultSO = PublishHypotheseInStudy(theStudy, aStudyBuilder, aHypo, theName);
+  else if(!aYACS->_is_nil())
+    aResultSO = PublishYACSInStudy(theStudy, aStudyBuilder, aYACS, theName);
   else if(!aZone->_is_nil())
     aResultSO = PublishZoneInStudy(theStudy, aStudyBuilder, aZone, theName);
-  else if(!aBoundary->_is_nil())
-    aResultSO = PublishBoundaryInStudy(theStudy, aStudyBuilder, aBoundary, theName);
 
-    aStudyBuilder->CommitCommand();
+  aStudyBuilder->CommitCommand();
+
   return aResultSO._retn();
 };
 //=============================================================================
+SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy,
+                   SALOMEDS::StudyBuilder_var aStudyBuilder,
+                   HOMARD::HOMARD_Boundary_ptr theObject, const char* theName)
+{
+  MESSAGE("PublishBoundaryStudy pour "<<theName);
+  SALOMEDS::SObject_var aResultSO;
+
+  // Caracteristique de la Boundary
+  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[theName];
+
+  // On recupere le module pere dans l etude
+  SALOMEDS::SComponent_var       theFatherHomard = theStudy->FindComponent(ComponentDataType());
+  if (theFatherHomard->_is_nil())
+  {
+    MESSAGE("theFatherHomard->_is_nil()");
+    return aResultSO._retn();
+  }
+
+  // On ajoute la categorie des boundarys dans l etude si necessaire
+  if ( _tag_boun == 0 )
+  {
+    _tag_gene += 1 ;
+    _tag_boun = _tag_gene ;
+  }
+  MESSAGE("PublishBoundaryInStudy _tag_gene = "<<_tag_gene << ", _tag_boun = "<<_tag_boun );
+  SALOMEDS::SObject_var aSObject;
+  if (!theFatherHomard->FindSubObject(_tag_boun, aSObject))
+  {
+    MESSAGE("Ajout de la categorie des boundarys");
+    aSObject = aStudyBuilder->NewObjectToTag(theFatherHomard, _tag_boun);
+    PublishInStudyAttr(aStudyBuilder, aSObject, "Boundaries", "BoundList", "zone_icone_2.png", NULL ) ;
+  }
+  else { MESSAGE("La categorie des boundarys existe deja."); }
+
+  CORBA::Long BoundaryType = myBoundary->GetType();
+//   MESSAGE("BoundaryType : "<<BoundaryType);
+  std::string icone ;
+  std::string value ;
+  switch (BoundaryType)
+  {
+    case 0 :
+    { value = "BoundaryDiHomard" ;
+      icone = "mesh_tree_mesh.png" ;
+      break;
+    }
+    case 1 :
+    { value = "BoundaryAnHomard" ;
+      icone = "cylinderpointvector_2.png" ;
+      break;
+    }
+    case 2 :
+    { value = "BoundaryAnHomard" ;
+      icone = "spherepoint_2.png" ;
+      break;
+    }
+    case 3 :
+    { value = "BoundaryAnHomard" ;
+      icone = "conepointvector.png" ;
+      break;
+    }
+    case 4 :
+    { value = "BoundaryAnHomard" ;
+      icone = "conedxyz.png" ;
+      break;
+    }
+    case 5 :
+    { value = "BoundaryAnHomard" ;
+      icone = "toruspointvector.png" ;
+      break;
+    }
+  }
+  aResultSO = aStudyBuilder->NewObject(aSObject);
+  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, value.c_str(), icone.c_str(), _orb->object_to_string(theObject));
+  return aResultSO._retn();
+}
+//=============================================================================
 SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishCaseInStudy(SALOMEDS::Study_ptr theStudy,
                                                        SALOMEDS::StudyBuilder_var aStudyBuilder,
                                                        HOMARD::HOMARD_Cas_ptr theObject, const char* theName)
 {
   MESSAGE("PublishCaseInStudy pour "<<theName);
   SALOMEDS::SObject_var aResultSO;
-  SALOMEDS::GenericAttribute_var anAttr;
 
   if (CORBA::is_nil(theObject)) {
-    MESSAGE("HOMARD_Gen_i.cxx::theObject->_is_nil()");
+    MESSAGE("HOMARD_Gen_i::theObject->_is_nil()");
     return aResultSO._retn();
   }
   if (theStudy->_is_nil()) {
-    MESSAGE("HOMARD_Gen_i.cxx::theStudy->_is_nil()");
+    MESSAGE("HOMARD_Gen_i::theStudy->_is_nil()");
     return aResultSO._retn();
   }
 
+  // On recupere le module pere dans l etude
   SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType());
   if (theFatherHomard->_is_nil())
   {
@@ -1608,54 +3456,138 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishCaseInStudy(SALOMEDS::Study_ptr theSt
     return aResultSO._retn();
   }
 
+  _tag_gene += 1 ;
+  MESSAGE("PublishCaseInStudy _tag_gene = "<<_tag_gene );
   aResultSO = aStudyBuilder->NewObject(theFatherHomard);
   PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "CasHomard", "cas_calcule.png",
                      _orb->object_to_string(theObject) ) ;
+
+  return aResultSO._retn();
+}
+//=============================================================================
+SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy,
+                   SALOMEDS::StudyBuilder_var aStudyBuilder,
+                   HOMARD::HOMARD_Hypothesis_ptr theObject, const char* theName)
+{
+  MESSAGE("PublishHypotheseInStudy pour "<<theName);
+  SALOMEDS::SObject_var aResultSO;
+
+  // On recupere le module pere dans l etude
+  // On ajoute la categorie des hypotheses dans l etude si necessaire
+  SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType());
+  if (theFatherHomard->_is_nil())
+  {
+    MESSAGE("theFatherHomard->_is_nil()");
+    return aResultSO._retn();
+  }
+
+  // On ajoute la categorie des hypotheses dans l etude si necessaire
+  SALOMEDS::SObject_var aSObject;
+  if ( _tag_hypo == 0 )
+  {
+    _tag_gene += 1 ;
+    _tag_hypo = _tag_gene ;
+  }
+  MESSAGE("PublishHypotheseInStudy _tag_gene = "<<_tag_gene << ", _tag_hypo = "<<_tag_hypo );
+  if (!theFatherHomard->FindSubObject(_tag_hypo, aSObject))
+  {
+    MESSAGE("Ajout de la categorie des hypotheses");
+    aSObject = aStudyBuilder->NewObjectToTag(theFatherHomard, _tag_hypo);
+    PublishInStudyAttr(aStudyBuilder, aSObject, "Hypothesis", "HypoList", "hypotheses.png", NULL);
+  }
+  else { MESSAGE("La categorie des hypotheses existe deja."); }
+
+// Creation du resultat dans l'etude
+  aResultSO = aStudyBuilder->NewObject(aSObject);
+  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "HypoHomard", NULL, _orb->object_to_string(theObject) ) ;
+
+  return aResultSO._retn();
+}
+//=============================================================================
+SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishYACSInStudy(SALOMEDS::Study_ptr theStudy,
+                   SALOMEDS::StudyBuilder_var aStudyBuilder,
+                   HOMARD::HOMARD_YACS_ptr theObject, const char* theName)
+{
+  MESSAGE("PublishYACSInStudy pour "<<theName);
+  SALOMEDS::SObject_var aResultSO;
+
+  // On recupere le module pere dans l etude
+  // On ajoute la categorie des schemas YACS dans l etude si necessaire
+  SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType());
+  if (theFatherHomard->_is_nil())
+  {
+    MESSAGE("theFatherHomard->_is_nil()");
+    return aResultSO._retn();
+  }
+  // On ajoute la categorie des schemas YACS dans l etude si necessaire
+  if ( _tag_yacs == 0 )
+  {
+    _tag_gene += 1 ;
+    _tag_yacs = _tag_gene ;
+  }
+  MESSAGE("PublishZoneStudy _tag_gene = "<<_tag_gene << ", _tag_yacs = "<<_tag_yacs );
+  SALOMEDS::SObject_var aSObject;
+  if (!theFatherHomard->FindSubObject(_tag_yacs, aSObject))
+  {
+    MESSAGE("Ajout de la categorie des schemas YACS");
+    aSObject = aStudyBuilder->NewObjectToTag(theFatherHomard, _tag_yacs);
+    PublishInStudyAttr(aStudyBuilder, aSObject, "YACS", "YACSList", "full_view.png", NULL);
+  }
+  else { MESSAGE("La categorie des schemas YACS existe deja."); }
+
+// Creation du resultat dans l'etude
+  aResultSO = aStudyBuilder->NewObject(aSObject);
+  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "YACSHomard", "schema.png", _orb->object_to_string(theObject) ) ;
+
   return aResultSO._retn();
 }
 
 //=============================================================================
 SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theStudy,
-                    SALOMEDS::StudyBuilder_var aStudyBuilder,
+                   SALOMEDS::StudyBuilder_var aStudyBuilder,
                    HOMARD::HOMARD_Zone_ptr theObject, const char* theName)
 {
   MESSAGE("PublishZoneStudy pour "<<theName);
   SALOMEDS::SObject_var aResultSO;
-  SALOMEDS::GenericAttribute_var anAttr;
-
   if (CORBA::is_nil(theObject))
   {
-    MESSAGE("HOMARD_Gen_i.cxx::theObject->_is_nil()");
+    MESSAGE("PublishZoneInStudy : theObject->_is_nil()");
     return aResultSO._retn();
   }
   if (theStudy->_is_nil())
   {
-    MESSAGE("HOMARD_Gen_i.cxx::theStudy->_is_nil()");
+    MESSAGE("PublishZoneInStudy : theStudy->_is_nil()");
     return aResultSO._retn();
   }
   SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType());
   if (theFatherHomard->_is_nil())
   {
-    MESSAGE("theFatherHomard->_is_nil()");
+    MESSAGE("PublishZoneInStudy : theFatherHomard->_is_nil()");
     return aResultSO._retn();
   }
 
   // Caracteristique de la zone
   HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[theName];
-  CORBA::Long ZoneType = myZone->GetZoneType();
+  CORBA::Long ZoneType = myZone->GetType();
 
   // On ajoute la categorie des zones dans l etude si necessaire
-  SALOMEDS::SObject_var aSOZone;
-  if (!theFatherHomard->FindSubObject(100, aSOZone))
+  if ( _tag_zone == 0 )
+  {
+    _tag_gene += 1 ;
+    _tag_zone = _tag_gene ;
+  }
+  MESSAGE("PublishZoneStudy _tag_gene = "<<_tag_gene << ", _tag_zone = "<<_tag_zone );
+  SALOMEDS::SObject_var aSObject;
+  if (!theFatherHomard->FindSubObject(_tag_zone, aSObject))
   {
     MESSAGE("Ajout de la categorie des zones");
-    aSOZone = aStudyBuilder->NewObjectToTag(theFatherHomard, 100);
-    PublishInStudyAttr(aStudyBuilder, aSOZone, "Zones", "ZoneList", "zone_icone_2.png", NULL ) ;
+    aSObject = aStudyBuilder->NewObjectToTag(theFatherHomard, _tag_zone);
+    PublishInStudyAttr(aStudyBuilder, aSObject, "Zones", "ZoneList", "zone_icone_2.png", NULL ) ;
   }
   else { MESSAGE("La categorie des zones existe deja."); }
 
-  aResultSO = aStudyBuilder->NewObject(aSOZone);
-  const char* icone ;
+  aResultSO = aStudyBuilder->NewObject(aSObject);
+  std::string icone ;
   switch (ZoneType)
   {
     case 11 :
@@ -1694,109 +3626,23 @@ SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishZoneInStudy(SALOMEDS::Study_ptr theSt
     { icone = "diskwithhole_2.png" ;
       break ;
      }
-    case 7 :
-    { icone = "pipe_2.png" ;
-      break ;
-    }
-  }
-  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", icone, _orb->object_to_string(theObject) ) ;
-
-  return aResultSO._retn();
-}
-//=============================================================================
-SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy,
-                   SALOMEDS::StudyBuilder_var aStudyBuilder,
-                   HOMARD::HOMARD_Boundary_ptr theObject, const char* theName)
-{
-  MESSAGE("PublishBoundaryStudy pour "<<theName);
-  SALOMEDS::SObject_var aResultSO;
-  SALOMEDS::GenericAttribute_var anAttr;
-
-  // Caracteristique de la Boundary
-  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[theName];
-
-  // On recupere le module pere dans l etude
-  SALOMEDS::SComponent_var       theFatherHomard = theStudy->FindComponent(ComponentDataType());
-  if (theFatherHomard->_is_nil())
-  {
-    MESSAGE("theFatherHomard->_is_nil()");
-    return aResultSO._retn();
-  }
-
-  // On ajoute la categorie des boundarys dans l etude si necessaire
-  SALOMEDS::SObject_var aSOBoundary;
-  if (!theFatherHomard->FindSubObject(101, aSOBoundary))
-  {
-    MESSAGE("Ajout de la categorie des boundarys");
-    aSOBoundary = aStudyBuilder->NewObjectToTag(theFatherHomard, 101);
-    PublishInStudyAttr(aStudyBuilder, aSOBoundary, "Boundaries", "BoundList", "zone_icone_2.png", NULL ) ;
-  }
-  else { MESSAGE("La categorie des boundarys existe deja."); }
-
-  aResultSO = aStudyBuilder->NewObject(aSOBoundary);
-  CORBA::Long BoundaryType = myBoundary->GetBoundaryType();
-//   MESSAGE("BoundaryType : "<<BoundaryType);
-  const char* icone ;
-  const char* value ;
-  switch (BoundaryType)
-  {
-    case 0 :
-    { value = "BoundaryDiHomard" ;
-      icone = "mesh_tree_mesh.png" ;
-      break;
-    }
-    case 1 :
-    { value = "BoundaryAnHomard" ;
-      icone = "cylinderpointvector_2.png" ;
-      break;
-    }
-    case 2 :
-    { value = "BoundaryAnHomard" ;
-      icone = "spherepoint_2.png" ;
-      break;
+    case 7 :
+    { icone = "pipe_2.png" ;
+      break ;
     }
   }
-  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, value, icone, _orb->object_to_string(theObject));
-  return aResultSO._retn();
-}
-
-//=============================================================================
-SALOMEDS::SObject_ptr HOMARD_Gen_i::PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy,
-                   SALOMEDS::StudyBuilder_var aStudyBuilder,
-                   HOMARD::HOMARD_Hypothesis_ptr theObject, const char* theName)
-{
-  MESSAGE("PublishHypotheseInStudy pour "<<theName);
-  SALOMEDS::SObject_var aResultSO;
-  SALOMEDS::GenericAttribute_var anAttr;
-
-  // On recupere le module pere dans l etude
-  // On ajoute la categorie des hypotheses dans l etude si necessaire
-  SALOMEDS::SComponent_var theFatherHomard = theStudy->FindComponent(ComponentDataType());
-  if (theFatherHomard->_is_nil())
-  {
-    MESSAGE("theFatherHomard->_is_nil()");
-    return aResultSO._retn();
-  }
-  SALOMEDS::SObject_var aSOHypothese;
-  if (!theFatherHomard->FindSubObject(0, aSOHypothese))
-  {
-    MESSAGE("Ajout de la categorie des hypotheses");
-    aSOHypothese = aStudyBuilder->NewObjectToTag(theFatherHomard, 0);
-    PublishInStudyAttr(aStudyBuilder, aSOHypothese, "Hypothesis", "HypoList","hypotheses.png", NULL);
-  }
-  else { MESSAGE("La categorie des hypotheses existe deja."); }
-
-// Creation du resultat dans l'etude
-  aResultSO = aStudyBuilder->NewObject(aSOHypothese);
-  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "HypoHomard", NULL, _orb->object_to_string(theObject) ) ;
+  PublishInStudyAttr(aStudyBuilder, aResultSO, theName, "ZoneHomard", icone.c_str(), _orb->object_to_string(theObject) ) ;
 
   return aResultSO._retn();
 }
 //===========================================================================
 void HOMARD_Gen_i::PublishInStudyAttr(SALOMEDS::StudyBuilder_var aStudyBuilder,
                                       SALOMEDS::SObject_var aResultSO,
-                                      const char* name, const char* value, const char* icone, const char* ior)
+                                      const char* name, const char* comment, const char* icone, const char* ior)
 {
+  MESSAGE("PublishInStudyAttr pour name = "<<name<<", comment = "<<comment);
+//   MESSAGE("icone = "<<icone);
+//   MESSAGE("ior   = "<<ior);
   SALOMEDS::GenericAttribute_var anAttr ;
 //  Ajout du nom
   if ( name != NULL )
@@ -1807,17 +3653,17 @@ void HOMARD_Gen_i::PublishInStudyAttr(SALOMEDS::StudyBuilder_var aStudyBuilder,
   }
 
 //  Ajout du commentaire
-  if ( value != NULL )
+  if ( comment != NULL )
   {
     anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeComment");
     SALOMEDS::AttributeComment_var aCommentAttrib = SALOMEDS::AttributeComment::_narrow(anAttr);
-    aCommentAttrib->SetValue(value);
+    aCommentAttrib->SetValue(comment);
   }
 
 //  Ajout de l'icone
   if ( icone != NULL  )
   {
-    anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO,"AttributePixMap");
+    anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributePixMap");
     SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
     aPixmap->SetPixMap(icone);
   }
@@ -1831,127 +3677,70 @@ void HOMARD_Gen_i::PublishInStudyAttr(SALOMEDS::StudyBuilder_var aStudyBuilder,
   }
 };
 
-//=============================================================================
-HOMARD::listeCases* HOMARD_Gen_i::GetAllCases()
+//=====================================================================================
+void HOMARD_Gen_i::PublishBoundaryUnderCase(const char* CaseName, const char* BoundaryName)
 {
-  MESSAGE("GetAllCases");
-  IsValidStudy () ;
+  MESSAGE ( "PublishBoundaryUnderCase : CaseName = " << CaseName << ", BoundaryName= " << BoundaryName );
 
-  HOMARD::listeCases_var ret = new HOMARD::listeCases;
-  ret->length(myContextMap[GetCurrentStudyID()]._mesCas.size());
-  std::map<std::string, HOMARD::HOMARD_Cas_var>::const_iterator it;
-  int i = 0;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesCas.begin();
-       it != myContextMap[GetCurrentStudyID()]._mesCas.end(); it++)
-  {
-    ret[i++] = CORBA::string_dup((*it).first.c_str());
-  }
-
-  return ret._retn();
-}
-
-//=============================================================================
-HOMARD::listeHypotheses* HOMARD_Gen_i::GetAllHypotheses()
-{
-  MESSAGE("GetAllHypotheses");
-  IsValidStudy () ;
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[CaseName];
+  ASSERT(!CORBA::is_nil(myCase));
+  SALOMEDS::SObject_var aCaseSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myCase)));
+  ASSERT(!CORBA::is_nil(aCaseSO));
 
-  HOMARD::listeHypotheses_var ret = new HOMARD::listeHypotheses;
-  ret->length(myContextMap[GetCurrentStudyID()]._mesHypotheses.size());
-  std::map<std::string, HOMARD::HOMARD_Hypothesis_var>::const_iterator it;
-  int i = 0;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesHypotheses.begin();
-  it != myContextMap[GetCurrentStudyID()]._mesHypotheses.end(); it++)
-  {
-    ret[i++] = CORBA::string_dup((*it).first.c_str());
-  }
+  HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
+  ASSERT(!CORBA::is_nil(myBoundary));
+  SALOMEDS::SObject_var aBoundarySO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myBoundary)));
+  ASSERT(!CORBA::is_nil(aBoundarySO));
 
-  return ret._retn();
-}
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
 
-//=============================================================================
-HOMARD::listeZones* HOMARD_Gen_i::GetAllZones()
-{
-  MESSAGE("GetAllZones");
-  IsValidStudy () ;
+  aStudyBuilder->NewCommand();
 
-  HOMARD::listeZones_var ret = new HOMARD::listeZones;
-  ret->length(myContextMap[GetCurrentStudyID()]._mesZones.size());
-  std::map<std::string, HOMARD::HOMARD_Zone_var>::const_iterator it;
-  int i = 0;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesZones.begin();
-  it != myContextMap[GetCurrentStudyID()]._mesZones.end(); it++)
-  {
-    ret[i++] = CORBA::string_dup((*it).first.c_str());
-  }
+  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aCaseSO);
+  aStudyBuilder->Addreference(aSubSO, aBoundarySO);
+//   aStudyBuilder->RemoveReference(aSubSO);
 
-  return ret._retn();
-}
+  aStudyBuilder->CommitCommand();
 
-//=============================================================================
-HOMARD::listeIterations* HOMARD_Gen_i::GetAllIterations()
+};
+//=====================================================================================
+void HOMARD_Gen_i::PublishCaseUnderYACS(const char* nomYACS, const char* CaseName)
 {
-  MESSAGE("GetAllIterations");
-  IsValidStudy () ;
+  MESSAGE ( "PublishCaseUnderYACS : nomYACS = " << nomYACS << ", CaseName= " << CaseName );
 
-  HOMARD::listeIterations_var ret = new HOMARD::listeIterations;
-  ret->length(myContextMap[GetCurrentStudyID()]._mesIterations.size());
-  std::map<std::string, HOMARD::HOMARD_Iteration_var>::const_iterator it;
-  int i = 0;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesIterations.begin();
-  it != myContextMap[GetCurrentStudyID()]._mesIterations.end(); it++)
-  {
-    ret[i++] = CORBA::string_dup((*it).first.c_str());
-  }
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+  ASSERT(!CORBA::is_nil(myYACS));
+  SALOMEDS::SObject_var aYACSSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myYACS)));
+  ASSERT(!CORBA::is_nil(aYACSSO));
 
-  return ret._retn();
-}
-//=============================================================================
-HOMARD::listeBoundarys* HOMARD_Gen_i::GetAllBoundarys()
-{
-  MESSAGE("GetAllBoundarys");
-  IsValidStudy () ;
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[CaseName];
+  ASSERT(!CORBA::is_nil(myCase));
+  SALOMEDS::SObject_var aCaseSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myCase)));
+  ASSERT(!CORBA::is_nil(aCaseSO));
 
-  HOMARD::listeBoundarys_var ret = new HOMARD::listeBoundarys;
-  ret->length(myContextMap[GetCurrentStudyID()]._mesBoundarys.size());
-  std::map<std::string, HOMARD::HOMARD_Boundary_var>::const_iterator it;
-  int i = 0;
-  for (it  = myContextMap[GetCurrentStudyID()]._mesBoundarys.begin();
-  it != myContextMap[GetCurrentStudyID()]._mesBoundarys.end(); it++)
-  {
-    ret[i++] = CORBA::string_dup((*it).first.c_str());
-  }
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
 
-  return ret._retn();
-}
+  aStudyBuilder->NewCommand();
 
-//=============================================================================
-char* HOMARD_Gen_i::GetCaseName(const char* nomIteration)
-{
-  if (CORBA::is_nil(myCurrentStudy))
-  {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Study Context ";
-      throw SALOME::SALOME_Exception(es);
-      return 0;
-  };
+  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aYACSSO);
+  aStudyBuilder->Addreference(aSubSO, aCaseSO);
 
-  HOMARD::HOMARD_Iteration_var monIter = myContextMap[GetCurrentStudyID()]._mesIterations[nomIteration];
-  ASSERT(!CORBA::is_nil(monIter));
-  return CORBA::string_dup(monIter->GetCaseName());
-}
+  aStudyBuilder->CommitCommand();
+
+};
 //=============================================================================
-void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeType)
+void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long Option)
+//  Option = 0 : fichier issu d'une importation
+//  Option = 1 : fichier issu d'une execution HOMARD
 {
-  MESSAGE( "PublishResultInSmesh " << NomFich);
+  MESSAGE( "PublishResultInSmesh " << NomFich << ", avec Option = " << Option);
   if (CORBA::is_nil(myCurrentStudy))
   {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Study Context ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid study context";
+    throw SALOME::SALOME_Exception(es);
+    return ;
   };
 
 // Le module SMESH est-il actif ?
@@ -1963,21 +3752,30 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy
     SALOMEDS::ChildIterator_var aIter = myCurrentStudy->NewChildIterator(aSmeshSO);
     for (; aIter->More(); aIter->Next())
     {
-       SALOMEDS::SObject_var  aSO = aIter->Value();
-       SALOMEDS::GenericAttribute_var aGAttr;
-       if (aSO->FindAttribute(aGAttr,"AttributeExternalFileDef"))
-       {
-           SALOMEDS::AttributeExternalFileDef_var anAttr = SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
-           CORBA::String_var value=anAttr->Value();
-           if (strcmp((const char*)value,NomFich) == 0)
-           {
-                // GERALD -- QMESSAGE BOX
-                std::cerr << "fichier : "<< NomFich << " deja publie "<< std::endl;
-                return;
-           }
-       }
-     }
-
+      SALOMEDS::SObject_var  aSO = aIter->Value();
+      SALOMEDS::GenericAttribute_var aGAttr;
+      if (aSO->FindAttribute(aGAttr,"AttributeExternalFileDef"))
+      {
+        SALOMEDS::AttributeExternalFileDef_var anAttr = SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
+        CORBA::String_var value=anAttr->Value();
+        if (strcmp((const char*)value,NomFich) == 0)
+        {
+          MESSAGE ( "PublishResultInSmesh : le fichier " << NomFich << " est deja publie." );
+          // Pour un fichier importe, on ne republie pas
+          if ( Option == 0 ) { return; }
+          // Pour un fichier calcule, on commence par faire la depublication
+          else
+          {
+            MESSAGE ( "PublishResultInSmesh : depublication" );
+            SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr);
+            CORBA::String_var value2=anAttr2->Value();
+            std::string MeshName = string(value2) ;
+            MESSAGE ( "PublishResultInSmesh : depublication de " << MeshName );
+            DeleteResultInSmesh(NomFich, MeshName) ;
+          }
+        }
+      }
+    }
   }
 
 // On enregistre le fichier
@@ -2002,24 +3800,22 @@ void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich, CORBA::Long IconeTy
     anAttr->SetValue(NomFich);
     SALOMEDS::GenericAttribute_var aPixMap = aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePixMap" );
     SALOMEDS::AttributePixMap_var anAttr2 = SALOMEDS::AttributePixMap::_narrow(aPixMap);
-//  IconeType = 0 : fichier issu d'une importation
-//  IconeType = 1 : fichier issu d'une execution HOMARD
     const char* icone ;
-    if ( IconeType == 0 ) { icone = "mesh_tree_importedmesh.png" ; }
-    else                  { icone = "mesh_tree_mesh.png" ; }
+    if ( Option == 0 ) { icone = "mesh_tree_importedmesh.png" ; }
+    else               { icone = "mesh_tree_mesh.png" ; }
     anAttr2->SetPixMap( icone );
   }
 
 }
 //=============================================================================
-void HOMARD_Gen_i::DeleteResultInSmesh(const char* NomFich, const char* MeshName)
+void HOMARD_Gen_i::DeleteResultInSmesh(std::string NomFich, std::string MeshName)
 {
-  MESSAGE (" DeleteResultInSmesh pour "<< NomFich << "et le maillage "<< MeshName);
+  MESSAGE ("DeleteResultInSmesh pour le maillage " << MeshName << " dans le fichier " << NomFich );
   if (CORBA::is_nil(myCurrentStudy))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Study Context ";
+      es.text = "Invalid study context";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
@@ -2042,13 +3838,13 @@ void HOMARD_Gen_i::DeleteResultInSmesh(const char* NomFich, const char* MeshName
      {
        SALOMEDS::AttributeExternalFileDef_var anAttr = SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
        CORBA::String_var value=anAttr->Value();
-       if (strcmp((const char*)value,NomFich) == 0)
+       if (strcmp((const char*)value,NomFich.c_str()) == 0)
        {
          if (aSO->FindAttribute(aGAttr,"AttributeName"))
          {
            SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr);
            CORBA::String_var value2=anAttr2->Value();
-           if (strcmp((const char*)value2,MeshName) == 0)
+           if (strcmp((const char*)value2,MeshName.c_str()) == 0)
            {
              myBuilder->RemoveObjectWithChildren( aSO ) ;
            }
@@ -2056,35 +3852,51 @@ void HOMARD_Gen_i::DeleteResultInSmesh(const char* NomFich, const char* MeshName
        }
      }
   }
-
+  return ;
 }
 //=============================================================================
-void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* NomFich, const char* Commentaire)
+void HOMARD_Gen_i::PublishMeshIterInSmesh(const char* NomIter)
 {
-  if (CORBA::is_nil(myCurrentStudy))
-  {
-      SALOME::ExceptionStruct es;
-      es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Study Context ";
-      throw SALOME::SALOME_Exception(es);
-      return ;
-  };
-
+  MESSAGE( "PublishMeshIterInSmesh " << NomIter);
   HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIter];
+
+  SALOMEDS::SObject_var aIterSO=SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
   if (CORBA::is_nil(myIteration))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Iteration ";
+      es.text = "Invalid iterationStudy Object";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
+  const char* MeshFile = myIteration->GetMeshFile() ;
+  const char* MeshName = myIteration->GetMeshName() ;
+  CORBA::Long Option = -1 ;
+  int etat = myIteration->GetState();
+// Iteration initiale
+  if ( etat <= 0 )      { Option = 0 ; }
+// ou iteration calculee
+  else if ( etat == 2 ) { Option = 1 ; }
+// Publication effective apres menage eventuel
+  if ( Option >= 0 )
+  {
+    DeleteResultInSmesh(MeshFile, MeshName) ;
+    PublishResultInSmesh(MeshFile, Option) ;
+  }
+
+}
+//=============================================================================
+void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* NomFich, const char* Commentaire)
+{
+//   MESSAGE ("PublishFileUnderIteration pour l'iteration " << NomIter << " du fichier " << NomFich << " avec le commentaire " << Commentaire );
+  HOMARD::HOMARD_Iteration_var myIteration = myContextMap[GetCurrentStudyID()]._mesIterations[NomIter];
+
   SALOMEDS::SObject_var aIterSO=SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myIteration)));
   if (CORBA::is_nil(myIteration))
   {
       SALOME::ExceptionStruct es;
       es.type = SALOME::BAD_PARAM;
-      es.text = "Invalid Iteration Study Object";
+      es.text = "Invalid iterationStudy Object";
       throw SALOME::SALOME_Exception(es);
       return ;
   };
@@ -2095,46 +3907,439 @@ void HOMARD_Gen_i::PublishFileUnderIteration(const char* NomIter, const char* No
 
   SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aIterSO);
 // Pour les fichiers med, on affiche une icone de maillage
-// Pour les fichiers qui sont texte, on affiche une icone de fichier texte 'texte'
+// Pour les fichiers qui sont du texte, on affiche une icone de fichier texte 'texte'
 // Le reperage se fait par la 1ere lettre du commentaire : I pour Iteration n
-  const char* icone ;
-  const char* ior = " " ;
-  if ( Commentaire[0] == 'I' )
+  std::string icone ;
+  std::string ior = " " ;
+  if ( Commentaire[0] == 'M' )
   { icone = "med.png" ; }
   else
   { icone = "texte_2.png" ; }
-  PublishInStudyAttr(aStudyBuilder, aSubSO, NomFich, Commentaire, icone, ior ) ;
+  PublishInStudyAttr(aStudyBuilder, aSubSO, NomFich, Commentaire, icone.c_str(), ior.c_str() ) ;
+
+  aStudyBuilder->CommitCommand();
+}
+//
+//=============================================================================
+void HOMARD_Gen_i::PublishFileUnderYACS(const char* nomYACS, const char* NomFich, const char* Commentaire)
+{
+//   MESSAGE ("PublishFileUnderYACS pour le schema " << nomYACS << " du fichier " << NomFich << " avec le commentaire " << Commentaire );
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+
+  SALOMEDS::SObject_var aYACSSO=SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myYACS)));
+  if (CORBA::is_nil(myYACS))
+  {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid YACSStudy Object";
+      throw SALOME::SALOME_Exception(es);
+      return ;
+  };
+
+  SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+
+  aStudyBuilder->NewCommand();
+
+  SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aYACSSO);
+  std::string icone = "texte_2.png" ;
+  std::string ior = " " ;
+  PublishInStudyAttr(aStudyBuilder, aSubSO, NomFich, Commentaire, icone.c_str(), ior.c_str() ) ;
+
+  aStudyBuilder->CommitCommand();
+}
+//
+//=============================================================================
+//=============================================================================
+// YACS
+//=============================================================================
+//=============================================================================
+//=============================================================================
+// Creation d'un schema YACS
+// nomCas : nom du cas a traiter
+// FileName : nom du fichier contenant le script de lancement du calcul
+// DirName : le repertoire de lancement des calculs du schéma
+//=============================================================================
+HOMARD::HOMARD_YACS_ptr HOMARD_Gen_i::CreateYACSSchema (const char* nomYACS, const char* nomCas, const char* ScriptFile, const char* DirName, const char* MeshFile)
+{
+  INFOS ( "CreateYACSSchema : Schema YACS " << nomYACS );
+  INFOS ( ". nomCas     : " << nomCas);
+  INFOS ( ". ScriptFile : " << ScriptFile);
+  INFOS ( ". DirName    : " << DirName);
+  INFOS ( ". MeshFile   : " << MeshFile);
+
+  // A. Controle du nom :
+  if ((myContextMap[GetCurrentStudyID()]._mesYACSs).find(nomYACS) != (myContextMap[GetCurrentStudyID()]._mesYACSs).end())
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This schema YACS has already been defined.";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  }
+
+  // B. Creation de l'objet
+  HOMARD::HOMARD_YACS_var myYACS = newYACS();
+  if (CORBA::is_nil(myYACS))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Unable to create the schema YACS";
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+  myYACS->SetName( nomYACS ) ;
+
+  // C. Enregistrement
+  myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS] = myYACS;
+
+  SALOMEDS::SObject_var aSO;
+  SALOMEDS::SObject_var aResultSO=PublishInStudy(myCurrentStudy, aSO, myYACS, nomYACS);
+
+  PublishCaseUnderYACS(nomYACS, nomCas);
+
+  // D. Caracterisation
+  // D.1. Options
+  myYACS->SetDirName( DirName ) ;
+  myYACS->SetMeshFile( MeshFile ) ;
+  myYACS->SetScriptFile( ScriptFile ) ;
+  myYACS->SetCaseName( nomCas ) ;
+  // D.2. Defaut
+  int defaut_i ;
+  // D.2.1. Type constant
+  myYACS->SetType( 1 ) ;
+  // D.2.2. Convergence
+  defaut_i = GetYACSMaxIter() ;
+  myYACS->SetMaxIter( defaut_i ) ;
+  defaut_i = GetYACSMaxNode() ;
+  myYACS->SetMaxNode( defaut_i ) ;
+  defaut_i = GetYACSMaxElem() ;
+  myYACS->SetMaxElem( defaut_i ) ;
+  // D.3. Fichier de sauvegarde dans le repertoire du cas
+  HOMARD::HOMARD_Cas_ptr caseyacs = GetCase(nomCas) ;
+  std::string dirnamecase = caseyacs->GetDirName() ;
+  std::string XMLFile ;
+  XMLFile = dirnamecase + "/schema.xml" ;
+  myYACS->SetXMLFile( XMLFile.c_str() ) ;
+
+  return HOMARD::HOMARD_YACS::_duplicate(myYACS);
+}
+//=============================================================================
+// Ecriture d'un schema YACS
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::YACSWrite(const char* nomYACS)
+{
+  INFOS ( "YACSWrite : Ecriture de " << nomYACS );
+// Le repertoire du cas
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+  ASSERT(!CORBA::is_nil(myYACS));
+// Le nom du fichier du schema
+  std::string XMLFile ;
+  XMLFile = myYACS->GetXMLFile() ;
+
+  int codret = YACSWriteOnFile(nomYACS, XMLFile.c_str()) ;
+
+  return codret ;
+}
+//=============================================================================
+// Ecriture d'un schema YACS sur un fichier donne
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::YACSWriteOnFile(const char* nomYACS, const char* XMLFile)
+{
+  INFOS ( "YACSWriteOnFile : Ecriture de " << nomYACS << " sur " << XMLFile );
+
+  // A. Prealable
+  int codret = 0;
+
+  // B. L'objet YACS
+  // B.1. L'objet
+  HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[nomYACS];
+  ASSERT(!CORBA::is_nil(myYACS));
+  // B.2. Les caracteristiques
+  std::string DirName = myYACS->GetDirName() ;
+  std::string MeshFile = myYACS->GetMeshFile() ;
+  std::string ScriptFile = myYACS->GetScriptFile() ;
+  // B.3. Les caracteristiques de convergence
+  int MaxIter = myYACS->GetMaxIter() ;
+  int MaxNode = myYACS->GetMaxNode() ;
+  int MaxElem = myYACS->GetMaxElem() ;
+
+  // C. Le cas
+  // C.1. L'objet cas
+  const char* nomCas = myYACS->GetCaseName();
+  HOMARD::HOMARD_Cas_var myCase = myContextMap[GetCurrentStudyID()]._mesCas[nomCas];
+  ASSERT(!CORBA::is_nil(myCase));
+  // C.2. Les instructions python associees au cas
+  CORBA::String_var dumpCorbaCase = myCase->GetDumpPython();
+  std::string pythonCas = dumpCorbaCase.in();
+  MESSAGE ("pythonCas :\n"<<pythonCas<<"\n");
+
+  // D. Les iterations
+  // D.1. L'iteration initiale
+  HOMARD::HOMARD_Iteration_var Iter0 = myCase->GetIter0() ;
+  std::string Iter0Name = myCase->GetIter0Name() ;
+  MESSAGE (". Iter0Name = " << Iter0Name);
+  std::string MeshName = Iter0->GetMeshName();
+  MESSAGE (". MeshName = " << MeshName);
+  // D.2. L'iteration numero 1
+  HOMARD::listeIterFilles* maListe = Iter0->GetIterations();
+  int numberOfIter = maListe->length();
+  if ( numberOfIter > 1 )
+  {
+    MESSAGE (". numberOfIter = " << numberOfIter);
+    SALOME::ExceptionStruct es ;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "Une seule iteration est permise." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  }
+  std::string Iter1Name = std::string((*maListe)[0]);
+  MESSAGE ("... Iter1Name = " << Iter1Name);
+  HOMARD::HOMARD_Iteration_var Iter1 = GetIteration(Iter1Name.c_str()) ;
+  // D.3. Les instructions python associees a l'iteration
+  CORBA::String_var dumpCorbaIter = Iter1->GetDumpPython();
+  std::string pythonIter = dumpCorbaIter.in();
+  MESSAGE ("pythonIter :\n"<<pythonIter<<"\n");
+
+  // E. L'hypothese pour passer de l'iteration initiale a la suivante
+  // E.1. La structure
+  std::string nomHypo = Iter1->GetHypoName();
+  MESSAGE (". nomHypo = " << nomHypo);
+  HOMARD::HOMARD_Hypothesis_var myHypo = myContextMap[GetCurrentStudyID()]._mesHypotheses[nomHypo];
+  ASSERT(!CORBA::is_nil(myHypo));
+  // E.2. Les caracteristiques de l'adaptation
+  HOMARD::listeTypes* ListTypes = myHypo->GetAdapRefinUnRef();
+  ASSERT(ListTypes->length() == 3);
+  int TypeAdap = (*ListTypes)[0];
+//   int TypeRaff = (*ListTypes)[1];
+//   int TypeDera = (*ListTypes)[2];
+  // E.3. Les instructions python associees a l'hypothese
+  CORBA::String_var dumpCorbaHypo = myHypo->GetDumpPython();
+  std::string pythonHypo = dumpCorbaHypo.in();
+  MESSAGE ("pythonHypo :\n"<<pythonHypo<<"\n");
+
+  // F. Le fichier du schema de reference
+  // HOMARD_ROOT_DIR : repertoire ou se trouve le module HOMARD
+  std::string XMLFile_base ;
+  if ( getenv("HOMARD_ROOT_DIR") != NULL ) { XMLFile_base = getenv("HOMARD_ROOT_DIR") ; }
+  else
+  {
+    SALOME::ExceptionStruct es ;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "HOMARD_ROOT_DIR est inconnu." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  }
+  XMLFile_base += "/share/salome/resources/homard/yacs_01." + _LangueShort + ".xml" ;
+//   if ( _Langue ==
+  MESSAGE("XMLFile_base ="<<XMLFile_base);
+
+  // G. Lecture du schema de reference et insertion des donnees propres au fil de la rencontre des mots-cles
+  YACSDriver* myDriver = new YACSDriver(XMLFile, DirName);
+  std::ifstream fichier( XMLFile_base.c_str() );
+  if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
+  {
+    // G.1. Lecture du schema de reference et insertion des donnees propres au fil de la rencontre des mots-cles
+    std::string ligne; // variable contenant chaque ligne lue
+    std::string mot_cle;
+    while ( std::getline( fichier, ligne ) )
+    {
+      // G.1.1. Pour la ligne courante, on identifie le premier mot : le mot-cle eventuel
+      std::istringstream ligne_bis(ligne); // variable contenant chaque ligne sous forme de flux
+      ligne_bis >> mot_cle ;
+      // G.1.2. Le maillage initial
+      if ( mot_cle == "DataInit_MeshFile" )
+      { myDriver->Texte_DataInit_MeshFile(MeshFile); }
+      // G.1.3. Le script de lancement
+      else if ( mot_cle == "Alternance_Calcul_HOMARD_Calcul" )
+      { myDriver->Texte_Alternance_Calcul_HOMARD_Calcul(ScriptFile); }
+      // G.1.4. Les options du cas
+      else if ( mot_cle == "Iter_1_Case_Options" )
+      { myDriver->Texte_Iter_1_Case_Options(pythonCas); }
+      // G.1.5. Execution de HOMARD : le repertoire du cas
+      else if ( mot_cle == "HOMARD_Exec_DirName" )
+      { myDriver->Texte_HOMARD_Exec_DirName(); }
+      // G.1.6. Execution de HOMARD : le nom du maillage
+      else if ( mot_cle == "HOMARD_Exec_MeshName" )
+      {
+        myDriver->Texte_HOMARD_Exec_MeshName(MeshName);
+        std::string node = "Boucle_de_convergence.Alternance_Calcul_HOMARD.Adaptation.p0_Adaptation_HOMARD.HOMARD_Initialisation.p1_Iter_1.CreateCase" ;
+        myDriver->TexteParametre( node, "MeshName", "string", MeshName ) ;
+      }
+      // G.1.7. Execution de HOMARD : les options de l'hypothese
+      else if ( mot_cle == "HOMARD_Exec_Hypo_Options" )
+      { myDriver->Texte_python_1( pythonHypo, 3, "Hypo" ) ;  }
+      // G.1.8. Execution de HOMARD : les options de l'iteration
+      else if ( mot_cle == "HOMARD_Exec_Iter_Options" )
+      { myDriver->Texte_python_2( pythonIter, "TimeStep", "Iter" ) ;  }
+      // G.1.9. a. Creation eventuelles des zones et frontieres
+      //        b. Enchainement
+      else if ( mot_cle == "Iter_1" )
+      {
+        std::string texte_control = "" ;
+        if ( TypeAdap == 0 ) { texte_control += YACSDriverTexteZone( myHypo, myDriver ) ; }
+        texte_control += YACSDriverTexteBoundary( myCase, myDriver ) ;
+        texte_control += myDriver->Texte_Iter_1_control() ;
+        myDriver->TexteAdd(texte_control);
+      }
+      // G.1.10. Les tests de convergence
+      else if ( mot_cle == "Analyse_Test_Convergence" )
+      { myDriver->TexteAnalyse_Test_Convergence(MaxIter, MaxNode, MaxElem); }
+      // G.1.11. Les parametres
+      else if ( mot_cle == "PARAMETRES" )
+      { myDriver->TexteAddParametres(); }
+      // G.1.n. La ligne est recopiee telle quelle
+      else { myDriver->TexteAdd(ligne);  }
+    }
+    // G.2. Ecriture du texte dans le fichier
+    if ( codret == 0 )
+    { myDriver->CreeFichier(); }
+  }
+  else
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "The reference file for the YACS schema cannot be read." ;
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  delete myDriver;
+
+  // H. Publication du fichier dans l'arbre
+
+    std::string Commentaire = "xml" ;
+    PublishFileUnderYACS(nomYACS, XMLFile, Commentaire.c_str());
+
+  return codret ;
+}
+//=============================================================================
+// Ecriture d'un schema YACS : ecriture des zones associees a une hypothese
+//=============================================================================
+std::string HOMARD_Gen_i::YACSDriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, YACSDriver* myDriver)
+{
+  MESSAGE ( "YACSDriverTexteZone" );
+  // A. Les zones associees a cette hypothese
+  HOMARD::listeZonesHypo* ListZone = myHypo->GetZones();
+  int numberOfZonesx2 = ListZone->length();
+
+  // B. Parcours des zones
+  std::string texte_control ;
+  for (int iaux = 0; iaux< numberOfZonesx2; iaux++)
+  {
+    // 1. Reperage de la zone
+    std::string ZoneName = std::string((*ListZone)[iaux]);
+    MESSAGE ( "\n. ZoneName = " << ZoneName << " - " <<iaux);
+    HOMARD::HOMARD_Zone_var myZone = myContextMap[GetCurrentStudyID()]._mesZones[ZoneName];
+    ASSERT(!CORBA::is_nil(myZone));
+    // 2. Les instructions python associees a la zone
+    //    La premiere ligne est un commentaire a eliminer
+    //    La seconde ligne est l'instruction a proprement parler ; on ne garde que ce qui suit le "."
+    CORBA::String_var dumpCorbaZone = myZone->GetDumpPython();
+    std::string pythonStructure_0 = dumpCorbaZone.in();
+    MESSAGE ("pythonStructure_0 :"<<pythonStructure_0);
+    std::istringstream tout (pythonStructure_0) ;
+    std::string ligne ;
+    std::string pythonStructure ;
+    while ( std::getline( tout, ligne ) )
+    { pythonStructure = GetStringInTexte ( ligne, ".", 1 ) ; }
+    MESSAGE ("pythonStructure :\n"<<pythonStructure);
+    // 3. Decodage du nom du service
+    std::string methode = GetStringInTexte ( pythonStructure, "(", 0 ) ;
+    MESSAGE ( "... methode = " << methode);
+    // 4. Mise en place des instructions
+    int ZoneType = myZone->GetType();
+    MESSAGE ( "... ZoneType = " << ZoneType);
+    std::string texte_control_0 ;
+    texte_control_0 = myDriver->Texte_Iter_1_Zone(ZoneType, pythonStructure, methode, ZoneName );
+    texte_control += texte_control_0 ;
+    // 5. Decalage
+    iaux ++ ;
+  }
 
-  aStudyBuilder->CommitCommand();
+  return texte_control ;
 }
-
-//=====================================================================================
-void HOMARD_Gen_i::IsValidStudy( )
-//=====================================================================================
+//=============================================================================
+// Ecriture d'un schema YACS : ecriture des frontieres associees au cas
+//=============================================================================
+std::string HOMARD_Gen_i::YACSDriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, YACSDriver* myDriver)
 {
-  MESSAGE( "IsValidStudy" );
-  if (CORBA::is_nil(myCurrentStudy))
+  MESSAGE ( "YACSDriverTexteBoundary" );
+  // A. Les frontieres associees au cas
+  HOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup();
+  int numberOfitems = ListBoundaryGroupType->length();
+
+  // B. Parcours des frontieres
+  std::string texte_control ;
+  std::list<std::string>  ListeBoundaryTraitees ;
+  for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
   {
-    SALOME::ExceptionStruct es;
-    es.type = SALOME::BAD_PARAM;
-    es.text = "Invalid Study Context";
-    throw SALOME::SALOME_Exception(es);
-  };
-  return ;
-}
+    std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]);
+    MESSAGE ( "... BoundaryName = " << BoundaryName);
+    // Attention a n'ecrire la definition qu'une seule fois car elle peut se trouver
+    // plusieurs fois dans la definition du cas, d'ou la liste ListeBoundaryTraitees
+    int A_faire = 1 ;
+    std::list<std::string>::const_iterator it = ListeBoundaryTraitees.begin();
+    while (it != ListeBoundaryTraitees.end())
+    {
+      MESSAGE ( "..... BoundaryNameTraitee = " << *it);
+      if ( BoundaryName == *it ) { A_faire = 0 ; }
+      it++;
+    }
+    if ( A_faire == 1 )
+    {
+    // 1. Caracteristiques de la frontiere
+      HOMARD::HOMARD_Boundary_var myBoundary = myContextMap[GetCurrentStudyID()]._mesBoundarys[BoundaryName];
+      ASSERT(!CORBA::is_nil(myBoundary));
+      // 2. Les instructions python associees a la frontiere
+      //    La premiere ligne est un commentaire a eliminer
+      //    La seconde ligne est l'instruction a proprement parler ; on ne garde que ce qui suit le "."
+      CORBA::String_var dumpCorbaBoundary = myBoundary->GetDumpPython();
+      std::string pythonStructure_0 = dumpCorbaBoundary.in();
+      MESSAGE ("pythonStructure_0 :"<<pythonStructure_0);
+      std::istringstream tout (pythonStructure_0) ;
+      std::string ligne ;
+      std::string pythonStructure ;
+      while ( std::getline( tout, ligne ) )
+      { pythonStructure = GetStringInTexte ( ligne, ".", 1 ) ; }
+      MESSAGE ("pythonStructure :\n"<<pythonStructure);
+      // 3. Decodage du nom du service
+      std::string methode = GetStringInTexte ( pythonStructure, "(", 0 ) ;
+      MESSAGE ( "... methode = " << methode);
+      // 4. Mise en place des instructions
+      int BoundaryType = myBoundary->GetType();
+      MESSAGE ( "... BoundaryType = " << BoundaryType);
+      const char* MeshName ;
+      const char* MeshFile ;
+      if (BoundaryType == 0)
+      {
+        MeshName = myBoundary->GetMeshName() ;
+        MESSAGE ( ". MeshName = " << MeshName );
+        MeshFile = myBoundary->GetMeshFile() ;
+        MESSAGE ( ". MeshFile = " << MeshFile );
+      }
+      std::string texte_control_0 ;
+      texte_control_0 = myDriver->Texte_Iter_1_Boundary(BoundaryType, pythonStructure, methode, BoundaryName, MeshName, MeshFile );
+      texte_control += texte_control_0 ;
+      // 5. Memorisation du traitement
+      ListeBoundaryTraitees.push_back( BoundaryName );
+    }
+  }
 
-//===========================================================================
+  return texte_control ;
+}
 //
+//=============================================================================
+//=============================================================================
 // Next functions are inherited from SALOMEDS::Driver interface
-//
-//===========================================================================
-
-//===========================================================================
+//=============================================================================
+//=============================================================================
 SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
                                       const char* theURL,
                                       CORBA::Boolean isMultiFile)
 {
-  MESSAGE (" Save pour theURL = "<< theURL);
+  MESSAGE ("Save for theURL = "<< theURL);
   SALOMEDS::TMPFile_var aStreamFile;
 
   // get temporary directory name
@@ -2166,7 +4371,7 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
 
   int id = 1;
 
-  // -> dump cases
+  // -> save cases
   std::map<std::string, HOMARD::HOMARD_Cas_var>::const_iterator it_case;
   for (it_case = context._mesCas.begin(); it_case != context._mesCas.end(); ++it_case) {
     HOMARD::HOMARD_Cas_var aCas = it_case->second;
@@ -2177,7 +4382,7 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
       context._idmap[id++] = dynamic_cast<PortableServer::ServantBase*>(aCasServant);
     }
   }
-  // -> dump zones
+  // -> save zones
   std::map<std::string, HOMARD::HOMARD_Zone_var>::const_iterator it_zone;
   for (it_zone = context._mesZones.begin(); it_zone != context._mesZones.end(); ++it_zone) {
     HOMARD::HOMARD_Zone_var aZone = it_zone->second;
@@ -2188,7 +4393,7 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
       context._idmap[id++] = dynamic_cast<PortableServer::ServantBase*>(aZoneServant);
     }
   }
-  // -> dump hypotheses
+  // -> save hypotheses
   std::map<std::string, HOMARD::HOMARD_Hypothesis_var>::const_iterator it_hypo;
   for (it_hypo = context._mesHypotheses.begin(); it_hypo != context._mesHypotheses.end(); ++it_hypo) {
     HOMARD::HOMARD_Hypothesis_var aHypo = it_hypo->second;
@@ -2199,7 +4404,7 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
       context._idmap[id++] = dynamic_cast<PortableServer::ServantBase*>(aHypoServant);
     }
   }
-  // -> dump iterations
+  // -> save iterations
   std::map<std::string, HOMARD::HOMARD_Iteration_var>::const_iterator it_iter;
   for (it_iter = context._mesIterations.begin(); it_iter != context._mesIterations.end(); ++it_iter) {
     HOMARD::HOMARD_Iteration_var aIter = it_iter->second;
@@ -2210,7 +4415,7 @@ SALOMEDS::TMPFile* HOMARD_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
       context._idmap[id++] = dynamic_cast<PortableServer::ServantBase*>(aIterServant);
     }
   }
-  // -> dump boundaries
+  // -> save boundaries
   std::map<std::string, HOMARD::HOMARD_Boundary_var>::const_iterator it_boundary;
   for (it_boundary = context._mesBoundarys.begin(); it_boundary != context._mesBoundarys.end(); ++it_boundary) {
     HOMARD::HOMARD_Boundary_var aBoundary = it_boundary->second;
@@ -2254,7 +4459,7 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
                                   const char* theURL,
                                   CORBA::Boolean isMultiFile)
 {
-  MESSAGE (" Load pour theURL = "<< theURL);
+  MESSAGE ("Load pour theURL = "<< theURL);
   SALOMEDS::Study_var aStudy = theComponent->GetStudy();
 
   // set current study
@@ -2293,14 +4498,26 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
 
   while (f) {
     std::getline(f, line);
+    std::string bounSignature = HOMARD::GetSignature(HOMARD::Boundary);
     std::string caseSignature = HOMARD::GetSignature(HOMARD::Case);
-    std::string zoneSignature = HOMARD::GetSignature(HOMARD::Zone);
-    std::string iterSignature = HOMARD::GetSignature(HOMARD::Iteration);
     std::string hypoSignature = HOMARD::GetSignature(HOMARD::Hypothesis);
-    std::string bounSignature = HOMARD::GetSignature(HOMARD::Boundary);
-    if (line.substr(0, caseSignature.size()) == caseSignature) {
+    std::string iterSignature = HOMARD::GetSignature(HOMARD::Iteration);
+    std::string zoneSignature = HOMARD::GetSignature(HOMARD::Zone);
+    std::string yacsSignature = HOMARD::GetSignature(HOMARD::YACS);
+    if (line.substr(0, bounSignature.size()) == bounSignature) {
+      // re-create boundary
+      MESSAGE ("Recreation de la frontiere" );
+      HOMARD::HOMARD_Boundary_var aBoundary = newBoundary();
+      PortableServer::ServantBase_var aServant = GetServant(aBoundary);
+      HOMARD_Boundary_i* aBoundaryServant = dynamic_cast<HOMARD_Boundary_i*>(aServant.in());
+      if (aBoundaryServant && aBoundaryServant->Restore(line.substr(bounSignature.size()))) {
+        context._mesBoundarys[aBoundary->GetName()] = aBoundary;
+        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aBoundaryServant);
+      }
+    }
+    else if (line.substr(0, caseSignature.size()) == caseSignature) {
       // re-create case
-      MESSAGE (" Recreation du cas" );
+      MESSAGE ("Recreation du cas" );
       HOMARD::HOMARD_Cas_var aCase = newCase();
       PortableServer::ServantBase_var aServant = GetServant(aCase);
       HOMARD_Cas_i* aCaseServant = dynamic_cast<HOMARD_Cas_i*>(aServant.in());
@@ -2309,20 +4526,20 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
         context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aCaseServant);
       }
     }
-    else if (line.substr(0, zoneSignature.size()) == zoneSignature) {
-      MESSAGE (" Recreation de la zone" );
-      // re-create zone
-      HOMARD::HOMARD_Zone_var aZone = newZone();
-      PortableServer::ServantBase_var aServant = GetServant(aZone);
-      HOMARD_Zone_i* aZoneServant = dynamic_cast<HOMARD_Zone_i*>(aServant.in());
-      if (aZoneServant && aZoneServant->Restore(line.substr(zoneSignature.size()))) {
-        context._mesZones[aZone->GetName()] = aZone;
-        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aZoneServant);
+    else if (line.substr(0, hypoSignature.size()) == hypoSignature) {
+      // re-create hypothesis
+      MESSAGE ("Recreation de l hypothese" );
+      HOMARD::HOMARD_Hypothesis_var aHypo = newHypothesis();
+      PortableServer::ServantBase_var aServant = GetServant(aHypo);
+      HOMARD_Hypothesis_i* aHypoServant = dynamic_cast<HOMARD_Hypothesis_i*>(aServant.in());
+      if (aHypoServant && aHypoServant->Restore(line.substr(hypoSignature.size()))) {
+        context._mesHypotheses[aHypo->GetName()] = aHypo;
+        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aHypoServant);
       }
     }
     else if (line.substr(0, iterSignature.size()) == iterSignature) {
       // re-create iteration
-      MESSAGE (" Recreation de l iteration" );
+      MESSAGE ("Recreation de l'iteration" );
       HOMARD::HOMARD_Iteration_var aIter = newIteration();
       PortableServer::ServantBase_var aServant = GetServant(aIter);
       HOMARD_Iteration_i* aIterServant = dynamic_cast<HOMARD_Iteration_i*>(aServant.in());
@@ -2331,26 +4548,26 @@ CORBA::Boolean HOMARD_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
         context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aIterServant);
       }
     }
-    else if (line.substr(0, hypoSignature.size()) == hypoSignature) {
-      // re-create hypothesis
-      MESSAGE (" Recreation de l hypothese" );
-      HOMARD::HOMARD_Hypothesis_var aHypo = newHypothesis();
-      PortableServer::ServantBase_var aServant = GetServant(aHypo);
-      HOMARD_Hypothesis_i* aHypoServant = dynamic_cast<HOMARD_Hypothesis_i*>(aServant.in());
-      if (aHypoServant && aHypoServant->Restore(line.substr(hypoSignature.size()))) {
-        context._mesHypotheses[aHypo->GetName()] = aHypo;
-        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aHypoServant);
+    else if (line.substr(0, zoneSignature.size()) == zoneSignature) {
+      MESSAGE ("Recreation de la zone" );
+      // re-create zone
+      HOMARD::HOMARD_Zone_var aZone = newZone();
+      PortableServer::ServantBase_var aServant = GetServant(aZone);
+      HOMARD_Zone_i* aZoneServant = dynamic_cast<HOMARD_Zone_i*>(aServant.in());
+      if (aZoneServant && aZoneServant->Restore(line.substr(zoneSignature.size()))) {
+        context._mesZones[aZone->GetName()] = aZone;
+        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aZoneServant);
       }
     }
-    else if (line.substr(0, bounSignature.size()) == bounSignature) {
-      // re-create boundary
-      MESSAGE (" Recreation de la frontiere" );
-      HOMARD::HOMARD_Boundary_var aBoundary = newBoundary();
-      PortableServer::ServantBase_var aServant = GetServant(aBoundary);
-      HOMARD_Boundary_i* aBoundaryServant = dynamic_cast<HOMARD_Boundary_i*>(aServant.in());
-      if (aBoundaryServant && aBoundaryServant->Restore(line.substr(bounSignature.size()))) {
-        context._mesBoundarys[aBoundary->GetName()] = aBoundary;
-        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aBoundaryServant);
+    else if (line.substr(0, zoneSignature.size()) == yacsSignature) {
+      MESSAGE ("Recreation du schema YACS" );
+      // re-create YACS
+      HOMARD::HOMARD_YACS_var aYACS = newYACS();
+      PortableServer::ServantBase_var aServant = GetServant(aYACS);
+      HOMARD_YACS_i* aYACSServant = dynamic_cast<HOMARD_YACS_i*>(aServant.in());
+      if (aYACSServant && aYACSServant->Restore(line.substr(yacsSignature.size()))) {
+        context._mesYACSs[aYACS->GetName()] = aYACS;
+        context._idmap[id] = dynamic_cast<PortableServer::ServantBase*>(aYACSServant);
       }
     }
     id++;
@@ -2522,49 +4739,6 @@ PortableServer::ServantBase_var HOMARD_Gen_i::GetServant(CORBA::Object_ptr theOb
   return aServant;
 }
 
-//===========================================================================
-HOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::newCase()
-{
-  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
-  HOMARD_Cas_i* aServant = new HOMARD_Cas_i(_orb, engine);
-  HOMARD::HOMARD_Cas_var aCase = HOMARD::HOMARD_Cas::_narrow(aServant->_this());
-  return aCase._retn();
-}
-
-//===========================================================================
-HOMARD::HOMARD_Hypothesis_ptr HOMARD_Gen_i::newHypothesis()
-{
-  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
-  HOMARD_Hypothesis_i* aServant = new HOMARD_Hypothesis_i(_orb, engine);
-  HOMARD::HOMARD_Hypothesis_var aHypo = HOMARD::HOMARD_Hypothesis::_narrow(aServant->_this());
-  return aHypo._retn();
-}
-
-//===========================================================================
-HOMARD::HOMARD_Iteration_ptr HOMARD_Gen_i::newIteration()
-{
-  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
-  HOMARD_Iteration_i* aServant = new HOMARD_Iteration_i(_orb, engine);
-  HOMARD::HOMARD_Iteration_var aIter = HOMARD::HOMARD_Iteration::_narrow(aServant->_this());
-  return aIter._retn();
-}
-
-//===========================================================================
-HOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::newBoundary()
-{
-  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
-  HOMARD_Boundary_i* aServant = new HOMARD_Boundary_i(_orb, engine);
-  HOMARD::HOMARD_Boundary_var aBoundary = HOMARD::HOMARD_Boundary::_narrow(aServant->_this());
-  return aBoundary._retn();
-}
-//===========================================================================
-HOMARD::HOMARD_Zone_ptr HOMARD_Gen_i::newZone()
-{
-  HOMARD::HOMARD_Gen_var engine = POA_HOMARD::HOMARD_Gen::_this();
-  HOMARD_Zone_i* aServant = new HOMARD_Zone_i(_orb, engine);
-  HOMARD::HOMARD_Zone_var aZone = HOMARD::HOMARD_Zone::_narrow(aServant->_this());
-  return aZone._retn();
-}
 //==========================================================================
 Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
                                        CORBA::Boolean isPublished,
@@ -2583,7 +4757,7 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
 
    std::string aScript = "\"\"\"\n";
    aScript += "Python script for HOMARD\n";
-   aScript += "Copyright EDF-R&D 2010\n";
+   aScript += "Copyright 1996, 2011, 2015 EDF\n";
    aScript += "\"\"\"\n";
    aScript += "__revision__ = \"V1.2\"\n";
    aScript += "import HOMARD\n";
@@ -2596,10 +4770,12 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
    }
    else
       aScript += "\thomard.SetCurrentStudy(salome.myStudy)\n";
+   MESSAGE (". Au depart \n"<<aScript);
 
 
    if (myContextMap[GetCurrentStudyID()]._mesBoundarys.size() > 0)
    {
+    MESSAGE (". Ecritures des frontieres");
     aScript += "#\n# Creation of the boundaries";
     aScript +=  "\n# ==========================";
    }
@@ -2610,12 +4786,14 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
     HOMARD::HOMARD_Boundary_var maBoundary = (*it_boundary).second;
     CORBA::String_var dumpCorbaBoundary = maBoundary->GetDumpPython();
     std::string dumpBoundary = dumpCorbaBoundary.in();
-    aScript+=dumpBoundary;
+    MESSAGE (dumpBoundary<<"\n");
+    aScript += dumpBoundary;
    }
 
 
    if (myContextMap[GetCurrentStudyID()]._mesZones.size() > 0)
    {
+    MESSAGE (". Ecritures des zones");
     aScript += "#\n# Creation of the zones";
     aScript +=  "\n# =====================";
    }
@@ -2623,15 +4801,20 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
    for ( it_zone  = myContextMap[GetCurrentStudyID()]._mesZones.begin();
          it_zone != myContextMap[GetCurrentStudyID()]._mesZones.end(); ++it_zone)
    {
-    HOMARD::HOMARD_Zone_var maZone = (*it_zone).second;
-    CORBA::String_var dumpCorbaZone = maZone->GetDumpPython();
+    HOMARD::HOMARD_Zone_var myZone = (*it_zone).second;
+    CORBA::String_var dumpCorbaZone = myZone->GetDumpPython();
     std::string dumpZone = dumpCorbaZone.in();
-    aScript+=dumpZone;
+    MESSAGE (dumpZone<<"\n");
+    aScript += dumpZone;
    }
 
 
-   aScript += "#\n# Creation of the hypotheses";
-   aScript +=  "\n# ==========================";
+   if (myContextMap[GetCurrentStudyID()]._mesHypotheses.size() > 0)
+   {
+    MESSAGE (". Ecritures des hypotheses");
+    aScript += "#\n# Creation of the hypotheses";
+    aScript +=  "\n# ==========================";
+   }
    std::map<std::string, HOMARD::HOMARD_Hypothesis_var>::const_iterator it_hypo;
    for ( it_hypo  = myContextMap[GetCurrentStudyID()]._mesHypotheses.begin();
          it_hypo != myContextMap[GetCurrentStudyID()]._mesHypotheses.end(); it_hypo++)
@@ -2639,12 +4822,17 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
     HOMARD::HOMARD_Hypothesis_var monHypo = (*it_hypo).second;
     CORBA::String_var dumpCorbaHypo = monHypo->GetDumpPython();
     std::string dumpHypo = dumpCorbaHypo.in();
-    aScript+=dumpHypo;
+    MESSAGE (dumpHypo<<"\n");
+    aScript += dumpHypo;
    }
 
 
-   aScript += "#\n# Creation of the cases";
-   aScript += "\n# =====================";
+   if (myContextMap[GetCurrentStudyID()]._mesCas.size() > 0)
+   {
+    MESSAGE (". Ecritures des cas");
+    aScript += "#\n# Creation of the cases";
+    aScript += "\n# =====================";
+   }
    std::map<std::string, HOMARD::HOMARD_Cas_var>::const_iterator it_cas;
    for (it_cas  = myContextMap[GetCurrentStudyID()]._mesCas.begin();
         it_cas != myContextMap[GetCurrentStudyID()]._mesCas.end(); it_cas++)
@@ -2653,7 +4841,7 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
            std::string dumpCas = std::string("\n# Creation of the case ") ;
            dumpCas +=  nomCas + std::string("\n");
            dumpCas += std::string("\t") + nomCas;
-           dumpCas += std::string(" = homard.CreateCase('") + nomCas + std::string("', '");
+           dumpCas += std::string(" = homard.CreateCase(\"") + nomCas + std::string("\", \"");
 
            HOMARD::HOMARD_Cas_var myCase = (*it_cas).second;
            CORBA::String_var cIter0= myCase->GetIter0Name();
@@ -2664,16 +4852,21 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
            std::string mesh0 = cMesh0.in();
            CORBA::String_var cMeshName0= myIteration->GetMeshName();
            std::string meshName0 = cMeshName0.in();
-           dumpCas += meshName0 + std::string("', '")+ mesh0 + std::string("')\n");
+           dumpCas += meshName0 + std::string("\", \"")+ mesh0 + std::string("\")\n");
            CORBA::String_var dumpCorbaCase = myCase->GetDumpPython();
            std::string dumpCas2= dumpCorbaCase.in();
 
-           aScript+=dumpCas + dumpCas2;
+           MESSAGE (dumpCas<<dumpCas2<<"\n");
+           aScript += dumpCas + dumpCas2;
         };
 
 
-   aScript += "#\n# Creation of the iterations" ;
-   aScript += "\n# ==========================";
+   if (myContextMap[GetCurrentStudyID()]._mesIterations.size() > 0)
+   {
+    MESSAGE (". Ecritures des iterations");
+    aScript += "#\n# Creation of the iterations" ;
+    aScript += "\n# ==========================";
+   }
    std::map<std::string, HOMARD::HOMARD_Iteration_var>::const_iterator it_iter;
    for (it_iter  = myContextMap[GetCurrentStudyID()]._mesIterations.begin();
         it_iter != myContextMap[GetCurrentStudyID()]._mesIterations.end(); ++it_iter)
@@ -2681,29 +4874,341 @@ Engines::TMPFile* HOMARD_Gen_i::DumpPython(CORBA::Object_ptr theStudy,
     HOMARD::HOMARD_Iteration_var aIter = (*it_iter).second;
     CORBA::String_var dumpCorbaIter = aIter->GetDumpPython();
     std::string dumpIter = dumpCorbaIter.in();
-    aScript+=dumpIter;
+    MESSAGE (dumpIter<<"\n");
+    aScript += dumpIter;
+   }
+
+
+   if (myContextMap[GetCurrentStudyID()]._mesYACSs.size() > 0)
+   {
+    MESSAGE (". Ecritures des schemas YACS");
+    aScript += "#\n# Creation of the schemas YACS";
+    aScript +=  "\n# ============================";
+   }
+   std::map<std::string, HOMARD::HOMARD_YACS_var>::const_iterator it_yacs;
+   for ( it_yacs  = myContextMap[GetCurrentStudyID()]._mesYACSs.begin();
+         it_yacs != myContextMap[GetCurrentStudyID()]._mesYACSs.end(); ++it_yacs)
+   {
+    HOMARD::HOMARD_YACS_var myYACS = (*it_yacs).second;
+    CORBA::String_var dumpCorbaYACS = myYACS->GetDumpPython();
+    std::string dumpYACS = dumpCorbaYACS.in();
+    MESSAGE (dumpYACS<<"\n");
+    aScript += dumpYACS;
    }
 
-    if( isMultiFile )
-      aScript += "\n\tpass";
-    aScript += "\n";
+  MESSAGE (". Ecritures finales");
+  if( isMultiFile )
+    aScript += "\n\tpass";
+  aScript += "\n";
+
+  if( !isMultiFile ) // remove unnecessary tabulation
+    aScript = RemoveTabulation( aScript );
+
+//   MESSAGE ("A ecrire \n"<<aScript);
+  const size_t aLen = strlen(aScript.c_str());
+  char* aBuffer = new char[aLen+1];
+  strcpy(aBuffer, aScript.c_str());
+
+  CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
+  Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
+
+  MESSAGE ("Sortie de DumpPython");
+  return aStreamFile._retn();
+}
+
+
+//=============================================================================
+//=============================================================================
+// Utilitaires
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::IsValidStudy( )
+{
+//   MESSAGE( "IsValidStudy" );
+  if (CORBA::is_nil(myCurrentStudy))
+  {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid study context";
+    throw SALOME::SALOME_Exception(es);
+  };
+  return ;
+}
+
+//=============================================================================
+char* HOMARD_Gen_i::VerifieDir(const char* nomDir)
+{
+  std::string casename = std::string("") ;
+  std::map<std::string, HOMARD::HOMARD_Cas_var>::const_iterator it;
+  for (it = myContextMap[GetCurrentStudyID()]._mesCas.begin();
+  it != myContextMap[GetCurrentStudyID()]._mesCas.end(); it++)
+  {
+   if (std::string(nomDir) == std::string(it->second->GetDirName()))
+   {
+     casename = std::string(it->second->GetName()) ;
+     break ;
+   }
+  }
+  return CORBA::string_dup( casename.c_str() );
+}
+/*//=============================================================================
+void SALOMEException( std::string message )
+{
+  SALOME::ExceptionStruct es;
+  es.type = SALOME::BAD_PARAM;
+  es.text = message;
+  throw SALOME::SALOME_Exception(es);
+  return ;
+}*/
+//=============================================================================
+char* HOMARD_Gen_i::getVersion()
+{
+#if HOMARD_DEVELOPMENT
+  return CORBA::string_dup(HOMARD_VERSION_STR"dev");
+#else
+  return CORBA::string_dup(HOMARD_VERSION_STR);
+#endif
+}
+//===============================================================================
+// Recuperation de la chaine de caracteres par rapport a l'apparition d'un caractere
+// ligne : la ligne a manipuler
+// caractere : le caractere a reperer
+// option : 0 : la chaine avant la premiere apparition du caractere
+//          1 : la chaine apres la premiere apparition du caractere
+//          2 : la chaine avant la derniere apparition du caractere
+//          3 : la chaine apres la derniere apparition du caractere
+// Si le caractere est absent, on retourne la chaine totale
+//===============================================================================
+std::string HOMARD_Gen_i::GetStringInTexte( const std::string ligne, const std::string caractere, int option )
+{
+//   MESSAGE("GetStringInTexte, recherche de '"<<caractere<<"' dans '"<<ligne<<"'"<<", option = "<<option);
+//
+  std::string chaine = ligne ;
+  int position ;
+  if ( option < 2 ) { position = ligne.find_first_of( caractere ) ; }
+  else              { position = ligne.find_last_of( caractere ) ; }
+//   MESSAGE("position = "<<position);
+//   MESSAGE("a = "<<ligne.substr( 0, position ).c_str());
+//   MESSAGE("b = "<<ligne.substr( position+1 ).c_str());
+//
+  if ( position != std::string::npos )
+  {
+    if ( ( option == 0 ) || ( option == 2 ) ) { chaine = ligne.substr( 0, position ) ; }
+    else                                      { chaine = ligne.substr( position+1 ) ; }
+  }
+  return chaine ;
+//
+}
+//=============================================================================
+//=============================================================================
+// Gestion des preferences
+//=============================================================================
+//=============================================================================
+// Decodage du fichier d'arcihvage des preferences
+//
+void HOMARD_Gen_i::SetPreferences( )
+{
+  MESSAGE ( "SetPreferences" );
+
+  std::string ligne, mot_cle, salome_version ;
+  bool ok = true ;
+
+  // A. Les valeurs par defaut ; elles doivent etre coherentes
+  std::string LanguageShort = "en" ;
+  int PublisMeshIN = 0 ;
+  int PublisMeshOUT = 0 ;
+  int YACSMaxIter = 0 ;
+  int YACSMaxNode = 0 ;
+  int YACSMaxElem = 0 ;
+  std::string YACSTypeTestchaine = "None" ;
+
+  // B. La version de salome
+  // Cela se presente sous la forme :
+  // [SALOME KERNEL] : 7.3.0
+  std::string File ;
+  File  = getenv("KERNEL_ROOT_DIR") ;
+  File += "/bin/salome/VERSION" ;
+  MESSAGE ( "File = "<<File ) ;
+  std::ifstream fichier0( File.c_str() ) ;
+  if ( fichier0 ) // ce test échoue si le fichier n'est pas ouvert
+  {
+    std::string ligne; // variable contenant chaque ligne lue
+    while ( std::getline( fichier0, ligne ) )
+    {
+      std::istringstream ligne_bis(ligne); // variable contenant chaque ligne sous forme de flux
+      ligne_bis >> mot_cle ;
+      if ( mot_cle == "[SALOME" )
+      {
+        salome_version = GetStringInTexte ( ligne, " ", 3 ) ;
+//         MESSAGE ( "salome_version = "<<salome_version<<"|||");
+        break ;
+      }
+    }
+  }
+  else { ok = false ; }
+
+  // B. Decodage du fichier de preferences
+  if ( ok )
+  {
+    std::string PrefFile ;
+    PrefFile  = getenv("HOME") ;
+    PrefFile += "/.config/salome/SalomeApprc." + salome_version ;
+    MESSAGE ( "PrefFile = "<<PrefFile ) ;
+
+    std::ifstream fichier( PrefFile.c_str() );
+    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
+    {
+      bool section_langue = false ;
+      bool section_homard = false ;
+      while ( std::getline( fichier, ligne ) )
+      {
+        std::string chaine ;
+        // 1. Pour la ligne courante, on identifie le premier mot : le mot-cle eventuel
+        std::istringstream ligne_bis(ligne); // variable contenant chaque ligne sous forme de flux
+        ligne_bis >> mot_cle ;
+
+        // 2. Les sections
+        // 2.1. Debut d'une section
+  //       MESSAGE(mot_cle);
+        if ( mot_cle == "<section" )
+        { /*MESSAGE ( "Debut de la section : "<< ligne);*/
+          ligne_bis >> mot_cle ;
+          chaine = GetStringInTexte ( mot_cle, "\"", 1 ) ;
+          chaine = GetStringInTexte ( chaine,  "\"", 0 ) ;
+          if ( chaine == "language" ) { section_langue = true ; }
+          if ( chaine == "HOMARD" )   { section_homard = true ; }
+  //         MESSAGE ( "section_langue = "<<section_langue<<", section_homard = "<<section_homard);
+        }
+        // 2.2. Fin d'une section
+        else if ( mot_cle == "</section>" )
+        { /*MESSAGE ( "Fin de la section : "<< ligne<<", section_langue = "<<section_langue<<", section_homard = "<<section_homard);*/
+          section_langue = false ;
+          section_homard = false ; }
+
+        // 3. Parametres
+        // 3.1. La langue
+        else if ( section_langue || section_homard )
+        { MESSAGE ( "a decoder : "<< ligne);
+//        La valeur : entre les deux premieres quotes
+          chaine = GetStringInTexte ( ligne, "\"", 1 ) ;
+//           MESSAGE("chaine 1 = |"<<chaine<<"|");
+          chaine = GetStringInTexte ( chaine,  "\"", 0 ) ;
+//           MESSAGE("chaine = |"<<chaine<<"|");
+//        Le mot_cle : entre les deux dernieres quotes
+          std::string chaine2 = GetStringInTexte ( ligne, "\"", 2 ) ;
+//           MESSAGE("chaine2 1 = |"<<chaine2<<"|");
+          chaine2 = GetStringInTexte ( chaine2,  "\"", 3 ) ;
+//           MESSAGE("chaine2 = |"<<chaine2<<"|");
+          // 3.1. La langue
+          if ( section_langue )
+          { if ( chaine2 == "language" ) { LanguageShort = chaine ; } }
+          // 3.2. HOMARD
+          if ( section_homard )
+          {
+            std::istringstream chainebis( chaine ) ;
+            // 3.2.1. Les publications
+            if ( chaine2 == "publish_mesh_in" )  { chainebis >> PublisMeshIN ; }
+            if ( chaine2 == "publish_mesh_out" ) { chainebis >> PublisMeshOUT ; }
+            // 3.2.2. Les maximum pour YACS
+            if ( chaine2 == "yacs_max_iter" ) { chainebis >> YACSMaxIter ; }
+            if ( chaine2 == "yacs_max_node" ) { chainebis >> YACSMaxNode ; }
+            if ( chaine2 == "yacs_max_elem" ) { chainebis >> YACSMaxElem ; }
+            if ( chaine2 == "yacs_type_test" ) { YACSTypeTestchaine = chaine ; }
+          }
+        }
+      }
+    }
+  }
+
+  // C. Enregistrements
+  MESSAGE ("Enregistrement de LanguageShort = " << LanguageShort );
+  SetLanguageShort( LanguageShort.c_str() ) ;
 
-    if( !isMultiFile ) // remove unnecessary tabulation
-      aScript = RemoveTabulation( aScript );
+  MESSAGE ("Enregistrement de PublisMeshIN = " << PublisMeshIN<<", PublisMeshOUT = "<< PublisMeshOUT);
+  SetPublisMesh(PublisMeshIN, PublisMeshOUT) ;
 
-   const size_t aLen = strlen(aScript.c_str());
-   char* aBuffer = new char[aLen+1];
-   strcpy(aBuffer, aScript.c_str());
+  MESSAGE ("Enregistrement de YACSMaxIter = " << YACSMaxIter<<", YACSMaxNode = "<< YACSMaxNode<<", YACSMaxElem = "<< YACSMaxElem);
+  SetYACSMaximum(YACSMaxIter, YACSMaxNode, YACSMaxElem) ;
 
-   CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
-   Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
+  MESSAGE ("Enregistrement de TypeTest = " << YACSTypeTestchaine.c_str() );
+  int YACSTypeTest ;
+  if ( ( YACSTypeTestchaine == "VTest > VRef" ) || ( YACSTypeTestchaine == "VTest &gt; VRef" ) )      { YACSTypeTest = 1 ; }
+  else if ( ( YACSTypeTestchaine == "VTest < VRef" ) || ( YACSTypeTestchaine == "VTest &lt; VRef" ) ) { YACSTypeTest = 2 ; }
+  else                                                                                                { YACSTypeTest = 0 ; }
+  MESSAGE ("==> TypeTest = " << YACSTypeTest );
+  SetYACSConvergenceType( YACSTypeTest ) ;
 
-   return aStreamFile._retn();
+  return ;
+}
+//===============================================================================
+// Langue de SALOME
+//===============================================================================
+void HOMARD_Gen_i::SetLanguageShort(const char* LanguageShort)
+{
+//   MESSAGE ("SetLanguageShort pour LanguageShort = " << LanguageShort );
+  _LangueShort = LanguageShort ;
+  if ( _LangueShort == "fr" ) { _Langue = "Francais" ; }
+  else                        { _Langue = "English" ; }
+  return ;
+}
+char* HOMARD_Gen_i::GetLanguageShort()
+{
+//   MESSAGE ("GetLanguageShort");
+  return CORBA::string_dup( _LangueShort.c_str() );
+}
+//===============================================================================
+// Options de publications
+//===============================================================================
+void HOMARD_Gen_i::SetPublisMesh(CORBA::Long PublisMeshIN, CORBA::Long PublisMeshOUT)
+{
+  _PublisMeshIN  = PublisMeshIN  ;
+  _PublisMeshOUT = PublisMeshOUT ;
+  return ;
+}
+CORBA::Long HOMARD_Gen_i::GetPublisMeshIN()
+{
+  return _PublisMeshIN ;
+}
+CORBA::Long HOMARD_Gen_i::GetPublisMeshOUT()
+{
+  return _PublisMeshOUT ;
+}
+//===============================================================================
+// YACS - test de convergence
+//===============================================================================
+void HOMARD_Gen_i::SetYACSMaximum(CORBA::Long YACSMaxIter, CORBA::Long YACSMaxNode, CORBA::Long YACSMaxElem)
+{
+  _YACSMaxIter = YACSMaxIter ;
+  _YACSMaxNode = YACSMaxNode ;
+  _YACSMaxElem = YACSMaxElem ;
+  return ;
+}
+CORBA::Long HOMARD_Gen_i::GetYACSMaxIter()
+{
+  return _YACSMaxIter ;
+}
+CORBA::Long HOMARD_Gen_i::GetYACSMaxNode()
+{
+  return _YACSMaxNode ;
+}
+CORBA::Long HOMARD_Gen_i::GetYACSMaxElem()
+{
+  return _YACSMaxElem ;
+}
+void HOMARD_Gen_i::SetYACSConvergenceType(CORBA::Long YACSTypeTest)
+{
+  _YACSTypeTest = YACSTypeTest ;
+  return ;
+}
+CORBA::Long HOMARD_Gen_i::GetYACSConvergenceType()
+{
+  return _YACSTypeTest ;
 }
 
 //=============================================================================
 extern "C"
 {
+  HOMARDENGINE_EXPORT
   PortableServer::ObjectId* HOMARDEngine_factory(CORBA::ORB_ptr orb,
                                                  PortableServer::POA_ptr poa,
                                                  PortableServer::ObjectId* contId,
index 4f646768939bfbbb73b3b35d49e8f0d2288e3746..9063b9a23911b3ac550822dbcbd980f21bd28068 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include CORBA_SERVER_HEADER(HOMARD_Iteration)
 #include CORBA_SERVER_HEADER(HOMARD_Zone)
 #include CORBA_SERVER_HEADER(HOMARD_Boundary)
+#include CORBA_SERVER_HEADER(HOMARD_YACS)
 #include CORBA_CLIENT_HEADER(SALOMEDS)
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
 
+#include "HOMARD_i.hxx"
 #include "HOMARD_Gen.hxx"
+#include "HomardDriver.hxx"
+#include "YACSDriver.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -39,7 +43,7 @@
 #include <string>
 #include <map>
 
-class HOMARD_Gen_i:
+class HOMARDENGINE_EXPORT HOMARD_Gen_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Gen
 {
@@ -52,13 +56,39 @@ public:
   virtual ~HOMARD_Gen_i();
 
 
-  SALOMEDS::Study_ptr             GetCurrentStudy();
-  void                            SetCurrentStudy(SALOMEDS::Study_ptr theStudy);
-  CORBA::Long                     GetCurrentStudyID();
+// Generalites
+
+// Les creations
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundary (const char* nomBoundary, CORBA::Long typeBoundary);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryDi (const char* nomBoundary,
+                                                    const char* MeshName, const char* FileName);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryCylinder (const char* nomBoundary,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+                                      CORBA::Double Rayon);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundarySphere (const char* nomBoundary,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Rayon);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryConeR (const char* nomBoundary,
+                                      CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1, CORBA::Double Rayon1,
+                                      CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2, CORBA::Double Rayon2);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryConeA (const char* nomBoundary,
+                                      CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis, CORBA::Double Angle,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre);
+  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryTorus (const char* nomBoundary,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+                                      CORBA::Double RayonRev, CORBA::Double RayonPri);
+
+  HOMARD::HOMARD_Cas_ptr          CreateCase (const char* nomCas, const char* MeshName, const char* FileName);
+  HOMARD::HOMARD_Cas_ptr          CreateCaseFromIteration (const char* nomCas, const char* DirNameStart);
+  HOMARD::HOMARD_Cas_ptr          CreateCaseFromCaseLastIteration (const char* nomCas, const char* DirNameStart);
+  HOMARD::HOMARD_Cas_ptr          CreateCaseFromCaseIteration (const char* nomCas, const char* DirNameStart, CORBA::Long Number);
+  HOMARD::HOMARD_Cas_ptr          CreateCase0 (const char* nomCas, const char* MeshName, const char* FileName, CORBA::Long MeshOption, CORBA::Long NumeIter, CORBA::Long Option);
+  std::string                     CreateCase1 (const char* DirNameStart, CORBA::Long Number);
 
-  HOMARD::HOMARD_Cas_ptr          CreateCase      (const char* nomCas,
-                                                   const char* MeshName, const char* FileName);
   HOMARD::HOMARD_Hypothesis_ptr   CreateHypothesis(const char* nomHypothesis);
+
   HOMARD::HOMARD_Iteration_ptr    CreateIteration (const char* nomIter, const char* nomIterParent);
 
   HOMARD::HOMARD_Zone_ptr         CreateZone (const char* nomZone, CORBA::Long typeZone);
@@ -66,20 +96,14 @@ public:
                                       CORBA::Double Xmini, CORBA::Double Xmaxi,
                                       CORBA::Double Ymini, CORBA::Double Ymaxi,
                                       CORBA::Double Zmini, CORBA::Double Zmaxi);
-  HOMARD::HOMARD_Zone_ptr         CreateZoneSphere (const char* nomZone,
-                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, CORBA::Double Rayon);
-  HOMARD::HOMARD_Zone_ptr         CreateZoneCylinder (const char* nomZone,
-                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
-                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
-                                      CORBA::Double Rayon, CORBA::Double Haut);
-  HOMARD::HOMARD_Zone_ptr         CreateZonePipe (const char* nomZone,
-                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
-                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
-                                      CORBA::Double Rayon, CORBA::Double Haut, CORBA::Double Rayonint);
   HOMARD::HOMARD_Zone_ptr         CreateZoneBox2D (const char* nomZone,
                                       CORBA::Double Umini, CORBA::Double Umaxi,
                                       CORBA::Double Vmini, CORBA::Double Vmaxi,
                                       CORBA::Long Orient);
+  HOMARD::HOMARD_Zone_ptr         CreateZoneCylinder (const char* nomZone,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
+                                      CORBA::Double Rayon, CORBA::Double Haut);
   HOMARD::HOMARD_Zone_ptr         CreateZoneDisk (const char* nomZone,
                                       CORBA::Double Ucentre, CORBA::Double Vcentre,
                                       CORBA::Double Rayon,
@@ -88,55 +112,109 @@ public:
                                       CORBA::Double Ucentre, CORBA::Double Vcentre,
                                       CORBA::Double Rayon, CORBA::Double Rayonint,
                                       CORBA::Long Orient);
-
-  HOMARD::HOMARD_Boundary_ptr     CreateBoundary (const char* nomBoundary, CORBA::Long typeBoundary);
-  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryDi (const char* nomBoundary,
-                                                    const char* MeshName, const char* FileName);
-  HOMARD::HOMARD_Boundary_ptr     CreateBoundaryCylinder (const char* nomBoundary,
-                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
-                                      CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
-                                      CORBA::Double Rayon);
-  HOMARD::HOMARD_Boundary_ptr     CreateBoundarySphere (const char* nomBoundary,
+  HOMARD::HOMARD_Zone_ptr         CreateZonePipe (const char* nomZone,
                                       CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
-                                      CORBA::Double Rayon);
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
+                                      CORBA::Double Rayon, CORBA::Double Haut, CORBA::Double Rayonint);
+  HOMARD::HOMARD_Zone_ptr         CreateZoneSphere (const char* nomZone,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, CORBA::Double Rayon);
 
-  HOMARD::HOMARD_Cas_ptr          GetCas        (const char* nomCas);
-  HOMARD::HOMARD_Zone_ptr         GetZone       (const char* nomZone);
+// Les informations
+  HOMARD::HOMARD_Boundary_ptr     GetBoundary   (const char* nomBoundary);
+  HOMARD::HOMARD_Cas_ptr          GetCase       (const char* nomCas);
   HOMARD::HOMARD_Hypothesis_ptr   GetHypothesis (const char* nomHypothesis);
   HOMARD::HOMARD_Iteration_ptr    GetIteration  (const char* nomIteration);
-  HOMARD::HOMARD_Boundary_ptr     GetBoundary   (const char* nomBoundary);
+  HOMARD::HOMARD_YACS_ptr         GetYACS       (const char* nomYACS);
+  HOMARD::HOMARD_Zone_ptr         GetZone       (const char* nomZone);
 
-  void                            AssociateCaseIter(const char* nomCas, const char* nomIter,
-                                                    const char* labelIter);
-  void                            AssociateIterIter(const char* nomIterParent, const char* nomIter);
-  void                            AssociateIterHypo(const char* nomIter, const char* nomHypothesis);
-  void                            AssociateHypoZone(const char* nomHypothesis, const char* nomZone, CORBA::Long TypeUse);
-  void                            DissociateHypoZone(const char* nomZone, const char* nomHypothesis);
+  HOMARD::listeBoundarys*         GetAllBoundarysName();
+  HOMARD::listeCases*             GetAllCasesName();
+  HOMARD::listeHypotheses*        GetAllHypothesesName();
+  HOMARD::listeIterations*        GetAllIterationsName();
+  HOMARD::listeYACSs*             GetAllYACSsName();
+  HOMARD::listeZones*             GetAllZonesName();
+
+  void                            MeshInfo      (const char* nomCas,
+                                                 const char* MeshName, const char* FileName, const char* DirName,
+                                                 CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte);
+
+  HOMARD::HOMARD_Iteration_ptr    LastIteration  (const char* nomCas);
+
+// L'etude
+  SALOMEDS::Study_ptr             GetCurrentStudy();
+  void                            SetCurrentStudy(SALOMEDS::Study_ptr theStudy);
+  CORBA::Long                     GetCurrentStudyID();
+  void                            IsValidStudy();
 
+// Liens entre structures
   void                            InvalideBoundary(const char* nomBoundary);
-  void                            InvalideZone(const char* nomZone);
   void                            InvalideHypo(const char* nomHypo);
   void                            InvalideIter(const char* nomIter);
+  void                            InvalideIterOption(const char* nomIter, CORBA::Long Option);
+  void                            InvalideIterInfo(const char* nomIter);
+  void                            InvalideYACS(const char* nomYACS);
+  void                            InvalideZone(const char* nomZone);
 
-  void                            SetEtatIter(const char* nomIter,const CORBA::Boolean EtatCalcul);
+  CORBA::Long                     DeleteBoundary(const char* nomBoundary);
+  CORBA::Long                     DeleteCase(const char* nomCas, CORBA::Long Option);
+  CORBA::Long                     DeleteHypo(const char* nomHypothesis);
+  CORBA::Long                     DeleteIteration(const char* nomIter, CORBA::Long Option);
+  CORBA::Long                     DeleteIterationOption(const char* nomIter, CORBA::Long Option1, CORBA::Long Option2);
+  CORBA::Long                     DeleteYACS(const char* nomYACS, CORBA::Long Option);
+  CORBA::Long                     DeleteZone(const char* nomZone);
 
-  HOMARD::listeCases*             GetAllCases();
-  HOMARD::listeHypotheses*        GetAllHypotheses();
-  HOMARD::listeZones*             GetAllZones();
-  HOMARD::listeIterations*        GetAllIterations();
-  HOMARD::listeBoundarys*         GetAllBoundarys();
+  void                            AssociateIterHypo(const char* nomIter, const char* nomHypothesis);
 
-  char*                           GetCaseName(const char* nomIteration);
+  void                            AssociateHypoZone(const char* nomHypothesis, const char* nomZone, CORBA::Long TypeUse);
+  void                            DissociateHypoZone(const char* nomHypothesis, const char* nomZone);
 
-  CORBA::Long                     Compute(const char* nomIteration, CORBA::Long etatMenage);
-  CORBA::Boolean                  VerifieDir(const char* nomDir);
+  void                            AssociateCaseIter(const char* nomCas, const char* nomIter,
+                                                    const char* labelIter);
 
-  void                            PublishResultInSmesh(const char* NomFich, CORBA::Long IconeType);
-  void                            DeleteResultInSmesh(const char* NomFich, const char* MeshName);
-  void                            PublishFileUnderIteration(const char* NomIter, const char* NomFich,
-                                                            const char* Commentaire);
+// Actions
+  void                            SetEtatIter(const char* nomIter,const CORBA::Long Etat);
+  char*                           CreateDirNameIter(const char* nomrep, CORBA::Long num );
+
+  CORBA::Long                     Compute(const char* nomIteration, CORBA::Long etatMenage, CORBA::Long modeHOMARD, CORBA::Long Option1, CORBA::Long Option2);
+  CORBA::Long                     ComputeAdap(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage, HomardDriver* myDriver, CORBA::Long Option1, CORBA::Long Option2);
+  char*                           ComputeDirManagement(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration, CORBA::Long etatMenage);
+  char*                           ComputeDirPaManagement(HOMARD::HOMARD_Cas_var myCase, HOMARD::HOMARD_Iteration_var myIteration);
+  void                            DriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver);
+  void                            DriverTexteField(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver);
+  void                            DriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, HomardDriver* myDriver);
+  void                            DriverTexteFieldInterp(HOMARD::HOMARD_Iteration_var myIteration, HOMARD::HOMARD_Hypothesis_var myHypo, HomardDriver* myDriver);
+
+  char*                           VerifieDir(const char* nomDir);
+
+  void                            PublishFileUnderIteration(const char* NomIter, const char* NomFich, const char* Commentaire);
+  void                            PublishFileUnderYACS(const char* NomYACS, const char* NomFich, const char* Commentaire);
+  void                            PublishBoundaryUnderCase(const char* CaseName, const char* BoundaryName);
+  void                            PublishCaseUnderYACS(const char* YACSName, const char* CaseName);
+  void                            PublishResultInSmesh(const char* NomFich, CORBA::Long Option);
+  void                            DeleteResultInSmesh(std::string NomFich, std::string MeshName);
+  void                            PublishMeshIterInSmesh(const char* NomIter);
+
+// YACS
+  HOMARD::HOMARD_YACS_ptr         CreateYACSSchema (const char* YACSName, const char* nomCas, const char* ScriptFile, const char* DirName, const char* MeshFile);
+  CORBA::Long                     YACSWrite(const char* nomYACS);
+  CORBA::Long                     YACSWriteOnFile(const char* nomYACS, const char* XMLFile);
+  std::string                     YACSDriverTexteZone(HOMARD::HOMARD_Hypothesis_var myHypo, YACSDriver* myDriver);
+  std::string                     YACSDriverTexteBoundary(HOMARD::HOMARD_Cas_var myCase, YACSDriver* myDriver);
+
+// Preferences
+  void                            SetPreferences() ;
+  void                            SetLanguageShort(const char* LanguageShort);
+  char*                           GetLanguageShort();
+  void                            SetPublisMesh(CORBA::Long PublisMeshIN, CORBA::Long PublisMeshOUT);
+  CORBA::Long                     GetPublisMeshIN();
+  CORBA::Long                     GetPublisMeshOUT();
+  void                            SetYACSMaximum(CORBA::Long YACSMaxIter, CORBA::Long YACSMaxNode, CORBA::Long YACSMaxElem);
+  CORBA::Long                     GetYACSMaxIter();
+  CORBA::Long                     GetYACSMaxNode();
+  CORBA::Long                     GetYACSMaxElem();
+  void                            SetYACSConvergenceType(CORBA::Long YACSTypeTest);
+  CORBA::Long                     GetYACSConvergenceType();
 
-  void                            IsValidStudy();
 
   // ---------------------------------------------------------------
   // next functions are inherited from SALOMEDS::Driver interface
@@ -195,45 +273,51 @@ public:
                                             CORBA::Long theObjectID,
                                             SALOMEDS::SObject_ptr theObject);
 
+//   virtual void SALOMEException( std::string message );
 
 private:
   void                            addInStudy(SALOMEDS::Study_ptr theStudy);
+  SALOMEDS::SObject_ptr           PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
+                                                     HOMARD::HOMARD_Boundary_ptr theObject, const char* theName);
   SALOMEDS::SObject_ptr           PublishCaseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
                                                      HOMARD::HOMARD_Cas_ptr theObject, const char* theName);
-
   SALOMEDS::SObject_ptr           PublishHypotheseInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
                                                      HOMARD::HOMARD_Hypothesis_ptr theObject, const char* theName);
-
+  SALOMEDS::SObject_ptr           PublishYACSInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
+                                                     HOMARD::HOMARD_YACS_ptr theObject, const char* theName);
   SALOMEDS::SObject_ptr           PublishZoneInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
                                                      HOMARD::HOMARD_Zone_ptr theObject, const char* theName);
-  SALOMEDS::SObject_ptr           PublishBoundaryInStudy(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder,
-                                                     HOMARD::HOMARD_Boundary_ptr theObject, const char* theName);
   virtual void                    PublishInStudyAttr(SALOMEDS::StudyBuilder_var aStudyBuilder,
                                                      SALOMEDS::SObject_var aResultSO,
-                                                     const char* theName, const char* value, const char* icone, const char* ior);
+                                                     const char* theName, const char* comment, const char* icone, const char* ior);
+
   PortableServer::ServantBase_var GetServant(CORBA::Object_ptr theObject);
 
+  HOMARD::HOMARD_Boundary_ptr     newBoundary();
   HOMARD::HOMARD_Cas_ptr          newCase();
   HOMARD::HOMARD_Hypothesis_ptr   newHypothesis();
   HOMARD::HOMARD_Iteration_ptr    newIteration();
+  HOMARD::HOMARD_YACS_ptr         newYACS();
   HOMARD::HOMARD_Zone_ptr         newZone();
-  HOMARD::HOMARD_Boundary_ptr     newBoundary();
 
 
-  virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
-                                       CORBA::Boolean isPublished,
-                                       CORBA::Boolean isMultiFile,
-                                       CORBA::Boolean& isValidScript);
+  virtual Engines::TMPFile*       DumpPython(CORBA::Object_ptr theStudy,
+                                            CORBA::Boolean isPublished,
+                                            CORBA::Boolean isMultiFile,
+                                            CORBA::Boolean& isValidScript);
 
+  virtual char*                   getVersion();
+  std::string GetStringInTexte( const std::string Texte, const std::string String, int option ) ;
 
 private:
   struct StudyContext
   {
+    std::map<std::string, HOMARD::HOMARD_Boundary_var>   _mesBoundarys;
     std::map<std::string, HOMARD::HOMARD_Cas_var>        _mesCas;
     std::map<std::string, HOMARD::HOMARD_Hypothesis_var> _mesHypotheses;
     std::map<std::string, HOMARD::HOMARD_Iteration_var>  _mesIterations;
+    std::map<std::string, HOMARD::HOMARD_YACS_var>       _mesYACSs;
     std::map<std::string, HOMARD::HOMARD_Zone_var>       _mesZones;
-    std::map<std::string, HOMARD::HOMARD_Boundary_var>   _mesBoundarys;
     std::map<int, PortableServer::ServantBase*>          _idmap;
   };
   typedef std::map<int, StudyContext> ContextMap;
@@ -243,6 +327,23 @@ private:
   ContextMap                    myContextMap;
   SALOME_NamingService*         _NS;
 
+  int _tag_gene ;
+  int _tag_boun ;
+  int _tag_hypo ;
+  int _tag_yacs ;
+  int _tag_zone ;
+
+// Preferences
+  std::string _Langue ;
+  std::string _LangueShort ;
+  int _PublisMeshIN ;
+  int _PublisMeshOUT ;
+  int _YACSMaxIter ;
+  int _YACSMaxNode ;
+  int _YACSMaxElem ;
+  int _YACSTypeTest ;
+ ;
+
 };
 
 #endif
index dd84483bd0c9bbf43db762c0187374461385dc49..2ab210585394afeaa22986c05fef2d1d3301584b 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #include "HOMARD_Hypothesis_i.hxx"
 #include "HOMARD_Gen_i.hxx"
 #include "HOMARD_Hypothesis.hxx"
@@ -58,17 +68,16 @@ HOMARD_Hypothesis_i::HOMARD_Hypothesis_i( CORBA::ORB_ptr orb,
 HOMARD_Hypothesis_i::~HOMARD_Hypothesis_i()
 {
 }
-
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Hypothesis_i::SetName( const char* NomHypothesis )
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Hypothesis_i::SetName( const char* Name )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetName( NomHypothesis );
+  myHomardHypothesis->SetName( Name );
 }
-
 //=============================================================================
 char* HOMARD_Hypothesis_i::GetName()
 {
@@ -76,39 +85,52 @@ char* HOMARD_Hypothesis_i::GetName()
   return CORBA::string_dup( myHomardHypothesis->GetName().c_str() );
 }
 //=============================================================================
-/*!
- */
-//=============================================================================
-void HOMARD_Hypothesis_i::SetCaseCreation( const char* NomCaseCreation )
+CORBA::Long  HOMARD_Hypothesis_i::Delete()
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetCaseCreation( NomCaseCreation );
+  char* HypoName = GetName() ;
+  MESSAGE ( "Delete : destruction de l'hypothese " << HypoName );
+  return _gen_i->DeleteHypo(HypoName) ;
 }
-
 //=============================================================================
-char* HOMARD_Hypothesis_i::GetCaseCreation()
+char* HOMARD_Hypothesis_i::GetDumpPython()
 {
   ASSERT( myHomardHypothesis );
-  return CORBA::string_dup( myHomardHypothesis->GetCaseCreation().c_str() );
+  return CORBA::string_dup( myHomardHypothesis->GetDumpPython().c_str() );
 }
 //=============================================================================
-char* HOMARD_Hypothesis_i::GetDumpPython()
+std::string HOMARD_Hypothesis_i::Dump() const
 {
-  ASSERT( myHomardHypothesis );
-  return CORBA::string_dup( myHomardHypothesis->GetDumpPython().c_str() );
+  return HOMARD::Dump( *myHomardHypothesis );
 }
-
 //=============================================================================
-/*!
- */
+bool HOMARD_Hypothesis_i::Restore( const std::string& stream )
+{
+  return HOMARD::Restore( *myHomardHypothesis, stream );
+}
 //=============================================================================
-void HOMARD_Hypothesis_i::SetAdapRefinUnRef( CORBA::Long TypeAdap,CORBA::Long TypeRaff, CORBA::Long TypeDera )
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Hypothesis_i::SetUnifRefinUnRef( CORBA::Long TypeRaffDera )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetAdapType( TypeAdap );
+  VERIFICATION( (TypeRaffDera==1) || (TypeRaffDera==-1) );
+  int TypeRaff, TypeDera ;
+  if ( TypeRaffDera == 1 )
+  {
+    TypeRaff = 1 ;
+    TypeDera = 0 ;
+  }
+  else if ( TypeRaffDera == -1 )
+  {
+    TypeRaff = 0 ;
+    TypeDera = 1 ;
+  }
+  myHomardHypothesis->SetAdapType( -1 );
   myHomardHypothesis->SetRefinTypeDera( TypeRaff, TypeDera );
 }
-
 //=============================================================================
 HOMARD::listeTypes* HOMARD_Hypothesis_i::GetAdapRefinUnRef()
 {
@@ -138,40 +160,26 @@ CORBA::Long HOMARD_Hypothesis_i::GetUnRefType()
   ASSERT( myHomardHypothesis );
   return CORBA::Long( myHomardHypothesis->GetUnRefType() );
 }
-
-//=============================================================================
-/*!
- */
 //=============================================================================
 void HOMARD_Hypothesis_i::SetField( const char* FieldName )
 {
   myHomardHypothesis->SetField( FieldName );
 }
 //=============================================================================
-void HOMARD_Hypothesis_i::SetRefinThr( CORBA::Long TypeThR, CORBA::Double ThreshR )
-{
-  myHomardHypothesis->SetRefinThr( TypeThR, ThreshR );
-}
-//=============================================================================
-void HOMARD_Hypothesis_i::SetUnRefThr( CORBA::Long TypeThC, CORBA::Double ThreshC )
-{
-  myHomardHypothesis->SetUnRefThr( TypeThC, ThreshC );
-}
-//=============================================================================
-void HOMARD_Hypothesis_i::SetUseComp( CORBA::Long UsCmpI )
+char* HOMARD_Hypothesis_i::GetFieldName()
 {
-  myHomardHypothesis->SetUseComp( UsCmpI );
+  ASSERT( myHomardHypothesis );
+  return CORBA::string_dup( myHomardHypothesis->GetFieldName().c_str() );
 }
 //=============================================================================
 void HOMARD_Hypothesis_i::SetUseField( CORBA::Long UsField )
 {
   myHomardHypothesis->SetUseField( UsField );
 }
-
 //=============================================================================
 HOMARD::InfosHypo* HOMARD_Hypothesis_i::GetField()
 {
-  ASSERT(myHomardHypothesis);
+  ASSERT( myHomardHypothesis );
   HOMARD::InfosHypo* aInfosHypo = new HOMARD::InfosHypo();
   aInfosHypo->FieldName  = CORBA::string_dup( myHomardHypothesis->GetFieldName().c_str() );
   aInfosHypo->TypeThR    = CORBA::Long( myHomardHypothesis->GetRefinThrType() );
@@ -179,14 +187,57 @@ HOMARD::InfosHypo* HOMARD_Hypothesis_i::GetField()
   aInfosHypo->TypeThC    = CORBA::Long( myHomardHypothesis->GetUnRefThrType() );
   aInfosHypo->ThreshC    = CORBA::Double( myHomardHypothesis->GetThreshC() );
   aInfosHypo->UsField    = CORBA::Long( myHomardHypothesis->GetUseField() );
-  aInfosHypo->UsCmpI     = CORBA::Long( myHomardHypothesis->GetUseCompI() );
+  aInfosHypo->UsCmpI     = CORBA::Long( myHomardHypothesis->GetUseComp() );
   return aInfosHypo;
 }
 //=============================================================================
-char* HOMARD_Hypothesis_i::GetFieldName()
+void HOMARD_Hypothesis_i::SetUseComp( CORBA::Long UsCmpI )
+{
+  myHomardHypothesis->SetUseComp( UsCmpI );
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::AddComp( const char* NomComp )
 {
   ASSERT( myHomardHypothesis );
-  return CORBA::string_dup( myHomardHypothesis->GetFieldName().c_str() );
+  myHomardHypothesis->AddComp( NomComp );
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SupprComp( const char* NomComp )
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprComp(NomComp);
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SupprComps()
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprComps();
+}
+//=============================================================================
+HOMARD::listeComposantsHypo* HOMARD_Hypothesis_i::GetComps()
+{
+  ASSERT( myHomardHypothesis );
+  const std::list<std::string>& ListString = myHomardHypothesis->GetComps();
+  HOMARD::listeComposantsHypo_var aResult = new HOMARD::listeComposantsHypo;
+  aResult->length( ListString.size() );
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for ( it = ListString.begin(); it != ListString.end(); it++ )
+  {
+    aResult[i++] = CORBA::string_dup( (*it).c_str() );
+  }
+  return aResult._retn();
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SetRefinThr( CORBA::Long TypeThR, CORBA::Double ThreshR )
+{
+  myHomardHypothesis->SetAdapType( 1 );
+  if ( TypeThR > 0 )
+  {
+    int TypeDera = myHomardHypothesis->GetUnRefType() ;
+    myHomardHypothesis->SetRefinTypeDera( 1, TypeDera );
+  }
+  myHomardHypothesis->SetRefinThr( TypeThR, ThreshR );
 }
 //=============================================================================
 CORBA::Long HOMARD_Hypothesis_i::GetRefinThrType()
@@ -195,93 +246,69 @@ CORBA::Long HOMARD_Hypothesis_i::GetRefinThrType()
   return CORBA::Long( myHomardHypothesis->GetRefinThrType() );
 }
 //=============================================================================
+void HOMARD_Hypothesis_i::SetUnRefThr( CORBA::Long TypeThC, CORBA::Double ThreshC )
+{
+  myHomardHypothesis->SetAdapType( 1 );
+  if ( TypeThC > 0 )
+  {
+    int TypeRaff = myHomardHypothesis->GetRefinType() ;
+    myHomardHypothesis->SetRefinTypeDera( TypeRaff, 1 );
+  }
+  myHomardHypothesis->SetUnRefThr( TypeThC, ThreshC );
+}
+//=============================================================================
 CORBA::Long HOMARD_Hypothesis_i::GetUnRefThrType()
 {
   ASSERT( myHomardHypothesis );
   return CORBA::Long( myHomardHypothesis->GetUnRefThrType() );
 }
-
-/*!
- */
 //=============================================================================
-void HOMARD_Hypothesis_i::AddIteration( const char* NomIteration )
+void HOMARD_Hypothesis_i::SetNivMax( CORBA::Long NivMax )
 {
-  ASSERT(myHomardHypothesis);
-  myHomardHypothesis->AddIteration( NomIteration );
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SetNivMax( NivMax );
 }
-
 //=============================================================================
-void  HOMARD_Hypothesis_i::AddZone( const char* NomZone, CORBA::Long TypeUse )
+CORBA::Long HOMARD_Hypothesis_i::GetNivMax()
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->AddZone( NomZone, TypeUse );
+  return myHomardHypothesis->GetNivMax();
 }
 //=============================================================================
-void  HOMARD_Hypothesis_i::SupprZone      (const char * NomZone)
+void HOMARD_Hypothesis_i::SetDiamMin( CORBA::Double DiamMin )
 {
-  ASSERT(myHomardHypothesis);
-  myHomardHypothesis->SupprZone( NomZone);
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SetDiamMin( DiamMin );
 }
 //=============================================================================
-HOMARD::listeZonesHypo* HOMARD_Hypothesis_i::GetZones()
+CORBA::Double HOMARD_Hypothesis_i::GetDiamMin()
 {
-  ASSERT(myHomardHypothesis);
-  const std::list<std::string>& ListString = myHomardHypothesis->GetZones();
-  HOMARD::listeZonesHypo_var aResult = new HOMARD::listeZonesHypo;
-  aResult->length( ListString.size() );
-  std::list<std::string>::const_iterator it;
-  int i = 0;
-  for ( it = ListString.begin(); it != ListString.end(); it++ )
-  {
-    aResult[i++] = CORBA::string_dup( (*it).c_str() );
-  }
-  return aResult._retn();
+  ASSERT( myHomardHypothesis );
+  return myHomardHypothesis->GetDiamMin();
 }
-
 //=============================================================================
-HOMARD::listeIters* HOMARD_Hypothesis_i::GetIterations()
+void HOMARD_Hypothesis_i::SetAdapInit( CORBA::Long AdapInit )
 {
-  ASSERT(myHomardHypothesis);
-  const std::list<std::string>& ListString = myHomardHypothesis->GetIterations();
-  HOMARD::listeIters_var aResult = new HOMARD::listeIters;
-  aResult->length( ListString.size() );
-  std::list<std::string>::const_iterator it;
-  int i = 0;
-  for ( it = ListString.begin(); it != ListString.end(); it++ )
-  {
-    aResult[i++] = CORBA::string_dup( (*it).c_str() );
-  }
-  return aResult._retn();
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SetAdapInit( AdapInit );
 }
-
 //=============================================================================
-void HOMARD_Hypothesis_i::AddComp( const char* NomComposant )
+CORBA::Long HOMARD_Hypothesis_i::GetAdapInit()
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->AddComp( NomComposant );
+  return myHomardHypothesis->GetAdapInit();
 }
-
 //=============================================================================
-void HOMARD_Hypothesis_i::SupprComp()
+void HOMARD_Hypothesis_i::SetExtraOutput( CORBA::Long ExtraOutput )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SupprComp();
+  myHomardHypothesis->SetExtraOutput( ExtraOutput );
 }
-
 //=============================================================================
-HOMARD::listeComposantsHypo* HOMARD_Hypothesis_i::GetListComp()
+CORBA::Long HOMARD_Hypothesis_i::GetExtraOutput()
 {
   ASSERT( myHomardHypothesis );
-  const std::list<std::string>& ListString = myHomardHypothesis->GetListComp();
-  HOMARD::listeComposantsHypo_var aResult = new HOMARD::listeComposantsHypo;
-  aResult->length( ListString.size() );
-  std::list<std::string>::const_iterator it;
-  int i = 0;
-  for ( it = ListString.begin(); it != ListString.end(); it++ )
-  {
-    aResult[i++] = CORBA::string_dup( (*it).c_str() );
-  }
-  return aResult._retn();
+  return myHomardHypothesis->GetExtraOutput();
 }
 //=============================================================================
 void HOMARD_Hypothesis_i::AddGroup( const char* Group)
@@ -290,13 +317,25 @@ void HOMARD_Hypothesis_i::AddGroup( const char* Group)
   myHomardHypothesis->AddGroup( Group );
 }
 //=============================================================================
+void HOMARD_Hypothesis_i::SupprGroup( const char* Group )
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprGroup(Group);
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SupprGroups()
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprGroups();
+}
+//=============================================================================
 void HOMARD_Hypothesis_i::SetGroups(const HOMARD::ListGroupType& ListGroup)
 {
   ASSERT( myHomardHypothesis );
   std::list<std::string> ListString;
   for ( int i = 0; i < ListGroup.length(); i++ )
   {
-      ListString.push_back(std::string(ListGroup[i]));
+    ListString.push_back(std::string(ListGroup[i]));
   }
   myHomardHypothesis->SetGroups( ListString );
 }
@@ -316,9 +355,6 @@ HOMARD::ListGroupType*  HOMARD_Hypothesis_i::GetGroups()
   return aResult._retn();
 }
 //=============================================================================
-/*!
- */
-//=============================================================================
 void HOMARD_Hypothesis_i::SetTypeFieldInterp( CORBA::Long TypeFieldInterp )
 {
   ASSERT( myHomardHypothesis );
@@ -334,22 +370,32 @@ CORBA::Long HOMARD_Hypothesis_i::GetTypeFieldInterp()
 void HOMARD_Hypothesis_i::AddFieldInterp( const char* FieldInterp )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->AddFieldInterp( FieldInterp );
+  myHomardHypothesis->AddFieldInterpType( FieldInterp, 0 );
 }
-
 //=============================================================================
-void HOMARD_Hypothesis_i::SupprFieldInterp()
+void HOMARD_Hypothesis_i::AddFieldInterpType( const char* FieldInterp, CORBA::Long TypeInterp )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SupprFieldInterp();
+  myHomardHypothesis->AddFieldInterpType( FieldInterp, TypeInterp );
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SupprFieldInterp( const char* FieldInterp )
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprFieldInterp(FieldInterp);
 }
-
 //=============================================================================
-HOMARD::listFieldInterpHypo* HOMARD_Hypothesis_i::GetListFieldInterp()
+void HOMARD_Hypothesis_i::SupprFieldInterps()
 {
   ASSERT( myHomardHypothesis );
-  const std::list<std::string>& ListString = myHomardHypothesis->GetListFieldInterp();
-  HOMARD::listFieldInterpHypo_var aResult = new HOMARD::listFieldInterpHypo;
+  myHomardHypothesis->SupprFieldInterps();
+}
+//=============================================================================
+HOMARD::listeFieldInterpsHypo* HOMARD_Hypothesis_i::GetFieldInterps()
+{
+  ASSERT( myHomardHypothesis );
+  const std::list<std::string>& ListString = myHomardHypothesis->GetFieldInterps();
+  HOMARD::listeFieldInterpsHypo_var aResult = new HOMARD::listeFieldInterpsHypo;
   aResult->length( ListString.size() );
   std::list<std::string>::const_iterator it;
   int i = 0;
@@ -360,50 +406,101 @@ HOMARD::listFieldInterpHypo* HOMARD_Hypothesis_i::GetListFieldInterp()
   return aResult._retn();
 }
 //=============================================================================
-void HOMARD_Hypothesis_i::SetNivMax( CORBA::Long NivMax )
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Hypothesis_i::SetCaseCreation( const char* NomCaseCreation )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetNivMax( NivMax );
+  myHomardHypothesis->SetCaseCreation( NomCaseCreation );
 }
 //=============================================================================
-CORBA::Long HOMARD_Hypothesis_i::GetNivMax()
+char* HOMARD_Hypothesis_i::GetCaseCreation()
 {
   ASSERT( myHomardHypothesis );
-  return myHomardHypothesis->GetNivMax();
+  return CORBA::string_dup( myHomardHypothesis->GetCaseCreation().c_str() );
 }
 //=============================================================================
-void HOMARD_Hypothesis_i::SetDiamMin( CORBA::Double DiamMin )
+void HOMARD_Hypothesis_i::LinkIteration( const char* NomIteration )
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetDiamMin( DiamMin );
+  myHomardHypothesis->LinkIteration( NomIteration );
 }
 //=============================================================================
-CORBA::Double HOMARD_Hypothesis_i::GetDiamMin()
+void HOMARD_Hypothesis_i::UnLinkIteration( const char* NomIteration )
 {
   ASSERT( myHomardHypothesis );
-  return myHomardHypothesis->GetDiamMin();
+  myHomardHypothesis->UnLinkIteration( NomIteration );
 }
 //=============================================================================
-void HOMARD_Hypothesis_i::SetAdapInit( CORBA::Long AdapInit )
+HOMARD::listeIters* HOMARD_Hypothesis_i::GetIterations()
 {
   ASSERT( myHomardHypothesis );
-  myHomardHypothesis->SetAdapInit( AdapInit );
+  const std::list<std::string>& ListString = myHomardHypothesis->GetIterations();
+  HOMARD::listeIters_var aResult = new HOMARD::listeIters;
+  aResult->length( ListString.size() );
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for ( it = ListString.begin(); it != ListString.end(); it++ )
+  {
+    aResult[i++] = CORBA::string_dup( (*it).c_str() );
+  }
+  return aResult._retn();
 }
 //=============================================================================
-CORBA::Long HOMARD_Hypothesis_i::GetAdapInit()
+void HOMARD_Hypothesis_i::AddZone( const char* NomZone, CORBA::Long TypeUse )
 {
+  MESSAGE ("Dans AddZone pour " << NomZone << " et TypeUse = " << TypeUse ) ;
   ASSERT( myHomardHypothesis );
-  return myHomardHypothesis->GetAdapInit();
+  VERIFICATION( (TypeUse==1) || (TypeUse==-1) );
+  myHomardHypothesis->SetAdapType( 0 );
+  int TypeRaff, TypeDera ;
+  if ( TypeUse == 1 )
+  {
+    TypeRaff = 1 ;
+    TypeDera = myHomardHypothesis->GetUnRefType() ;
+  }
+  else if ( TypeUse == -1 )
+  {
+    TypeRaff = myHomardHypothesis->GetRefinType() ;
+    TypeDera = 1 ;
+  }
+  myHomardHypothesis->SetRefinTypeDera( TypeRaff, TypeDera );
+  char* NomHypo = GetName() ;
+  return _gen_i->AssociateHypoZone(NomHypo, NomZone, TypeUse) ;
 }
-
 //=============================================================================
-std::string HOMARD_Hypothesis_i::Dump() const
+void HOMARD_Hypothesis_i::AddZone0( const char* NomZone, CORBA::Long TypeUse )
 {
-  return HOMARD::Dump( *myHomardHypothesis );
+  MESSAGE ("Dans AddZone0 pour " << NomZone) ;
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->AddZone( NomZone, TypeUse );
 }
-
 //=============================================================================
-bool HOMARD_Hypothesis_i::Restore( const std::string& stream )
+void HOMARD_Hypothesis_i::SupprZone(const char * NomZone)
 {
-  return HOMARD::Restore( *myHomardHypothesis, stream );
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprZone( NomZone);
+}
+//=============================================================================
+void HOMARD_Hypothesis_i::SupprZones()
+{
+  ASSERT( myHomardHypothesis );
+  myHomardHypothesis->SupprZones();
+}
+//=============================================================================
+HOMARD::listeZonesHypo* HOMARD_Hypothesis_i::GetZones()
+{
+  ASSERT( myHomardHypothesis );
+  const std::list<std::string>& ListString = myHomardHypothesis->GetZones();
+  HOMARD::listeZonesHypo_var aResult = new HOMARD::listeZonesHypo;
+  aResult->length( ListString.size() );
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for ( it = ListString.begin(); it != ListString.end(); it++ )
+  {
+    aResult[i++] = CORBA::string_dup( (*it).c_str() );
+  }
+  return aResult._retn();
 }
index ea7649a3866e2121f8f652694d2f3cd21c1479ad..92425327120415ed40ecf96f46257ac9cb878827 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_HYPOTHESIS_I_HXX_
 #define _HOMARD_HYPOTHESIS_I_HXX_
 
@@ -24,6 +34,7 @@
 #include CORBA_SERVER_HEADER(HOMARD_Gen)
 #include CORBA_SERVER_HEADER(HOMARD_Hypothesis)
 
+#include "HOMARD_i.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -32,7 +43,7 @@
 
 class HOMARD_Hypothesis;
 
-class HOMARD_Hypothesis_i:
+class HOMARDENGINE_EXPORT HOMARD_Hypothesis_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Hypothesis,
   public virtual PortableServer::ServantBase
@@ -43,57 +54,79 @@ public:
 
   virtual ~HOMARD_Hypothesis_i();
 
-  void                         SetName( const char* NomHypothesis );
-  char*                        GetName();
-  void                         SetCaseCreation( const char* NomCaseCreation );
-  char*                        GetCaseCreation();
-  char*                        GetDumpPython();
-
-  void                         SetAdapRefinUnRef( CORBA::Long TypeAdap, CORBA::Long TypeRaff, CORBA::Long TypeDera );
-  HOMARD::listeTypes*          GetAdapRefinUnRef();
-  CORBA::Long                  GetAdapType();
-  CORBA::Long                  GetRefinType();
-  CORBA::Long                  GetUnRefType();
-
-  void                         SetField( const char* FieldName );
-  char*                        GetFieldName();
-  void                         SetRefinThr(CORBA::Long TypeThR, CORBA::Double ThreshR);
-  CORBA::Long                  GetRefinThrType();
-  void                         SetUnRefThr(CORBA::Long TypeThC, CORBA::Double ThreshC);
-  CORBA::Long                  GetUnRefThrType();
-  void                         SetUseComp(CORBA::Long UsCmpI);
-  void                         SetUseField(CORBA::Long UsField);
-  HOMARD::InfosHypo*           GetField();
-
-  void                         AddIteration( const char* NomIteration );
-  void                         AddZone( const char* NomZone, CORBA::Long TypeUse );
-  void                         SupprZone( const char* NomZone );
-  void                         AddComp( const char* NomComposant );
-  void                         SupprComp();
-
-  HOMARD::listeComposantsHypo* GetListComp();
-  HOMARD::listeIters*          GetIterations();
-  HOMARD::listeZonesHypo*      GetZones();
-
-  void                         AddGroup( const char* Group);
-  void                         SetGroups(const HOMARD::ListGroupType& ListGroup);
-  HOMARD::ListGroupType*       GetGroups();
-
-  void                         SetTypeFieldInterp( CORBA::Long TypeFieldInterp );
-  CORBA::Long                  GetTypeFieldInterp();
-  void                         AddFieldInterp( const char* FieldInterp );
-  void                         SupprFieldInterp();
-  HOMARD::listFieldInterpHypo* GetListFieldInterp();
-
-  void                         SetNivMax( CORBA::Long NivMax );
-  CORBA::Long                  GetNivMax();
-  void                         SetDiamMin( CORBA::Double DiamMin );
-  CORBA::Double                GetDiamMin();
-  void                         SetAdapInit( CORBA::Long AdapInit );
-  CORBA::Long                  GetAdapInit();
-
-  std::string                  Dump() const;
-  bool                         Restore( const std::string& stream );
+// Generalites
+  void                   SetName( const char* Name );
+  char*                  GetName();
+
+  CORBA::Long            Delete();
+
+  char*                  GetDumpPython();
+
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
+
+// Caracteristiques
+  void                   SetUnifRefinUnRef( CORBA::Long TypeRaffDera );
+  HOMARD::listeTypes*    GetAdapRefinUnRef();
+  CORBA::Long            GetAdapType();
+  CORBA::Long            GetRefinType();
+  CORBA::Long            GetUnRefType();
+
+  void                   SetField( const char* FieldName );
+  char*                  GetFieldName();
+  void                   SetUseField(CORBA::Long UsField);
+  HOMARD::InfosHypo*     GetField();
+
+  void                   SetUseComp(CORBA::Long UsCmpI);
+  void                   AddComp( const char* NomComp );
+  void                   SupprComp( const char* NomComp );
+  void                   SupprComps();
+  HOMARD::listeComposantsHypo* GetComps();
+
+  void                   SetRefinThr(CORBA::Long TypeThR, CORBA::Double ThreshR);
+  CORBA::Long            GetRefinThrType();
+  void                   SetUnRefThr(CORBA::Long TypeThC, CORBA::Double ThreshC);
+  CORBA::Long            GetUnRefThrType();
+
+  void                   SetNivMax( CORBA::Long NivMax );
+  CORBA::Long            GetNivMax();
+
+  void                   SetDiamMin( CORBA::Double DiamMin );
+  CORBA::Double          GetDiamMin();
+
+  void                   SetAdapInit( CORBA::Long AdapInit );
+  CORBA::Long            GetAdapInit();
+
+  void                   SetExtraOutput( CORBA::Long ExtraOutput );
+  CORBA::Long            GetExtraOutput();
+
+  void                   AddGroup( const char* Group);
+  void                   SupprGroup( const char* Group );
+  void                   SupprGroups();
+  void                   SetGroups(const HOMARD::ListGroupType& ListGroup);
+  HOMARD::ListGroupType* GetGroups();
+
+  void                   SetTypeFieldInterp( CORBA::Long TypeFieldInterp );
+  CORBA::Long            GetTypeFieldInterp();
+  void                   AddFieldInterp( const char* FieldInterp );
+  void                   AddFieldInterpType( const char* FieldInterp, CORBA::Long TypeInterp );
+  void                   SupprFieldInterp( const char* FieldInterp );
+  void                   SupprFieldInterps();
+  HOMARD::listeFieldInterpsHypo* GetFieldInterps();
+
+// Liens avec les autres structures
+  void                   SetCaseCreation( const char* NomCaseCreation );
+  char*                  GetCaseCreation();
+
+  void                   LinkIteration( const char* NomIteration );
+  void                   UnLinkIteration( const char* NomIteration );
+  HOMARD::listeIters*    GetIterations();
+
+  void                   AddZone( const char* NomZone, CORBA::Long TypeUse );
+  void                   AddZone0( const char* NomZone, CORBA::Long TypeUse );
+  void                   SupprZone( const char* NomZone );
+  void                   SupprZones();
+  HOMARD::listeZonesHypo* GetZones();
 
 private:
   ::HOMARD_Hypothesis*         myHomardHypothesis;
index a913cf92b39681d6fa52aec3475f57e3e931edd0..7bd0735481993a815f61a3b86649bd39866d36c4 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #include "HOMARD_Iteration_i.hxx"
 #include "HOMARD_Gen_i.hxx"
 #include "HOMARD_Iteration.hxx"
@@ -36,7 +46,6 @@ HOMARD_Iteration_i::HOMARD_Iteration_i()
   MESSAGE( "Default constructor, not for use" );
   ASSERT( 0 );
 }
-
 //=============================================================================
 /*!
  *  standard constructor
@@ -51,7 +60,6 @@ HOMARD_Iteration_i::HOMARD_Iteration_i( CORBA::ORB_ptr orb,
   myHomardIteration = new ::HOMARD_Iteration();
   ASSERT( myHomardIteration );
 }
-
 //=============================================================================
 /*!
  *  standard destructor
@@ -60,238 +68,398 @@ HOMARD_Iteration_i::HOMARD_Iteration_i( CORBA::ORB_ptr orb,
 HOMARD_Iteration_i::~HOMARD_Iteration_i()
 {
 }
-
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Iteration_i::SetName( const char* NomIter )
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration_i::SetName( const char* Name )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetName( NomIter );
+  myHomardIteration->SetName( Name );
 }
-
 //=============================================================================
 char* HOMARD_Iteration_i::GetName()
 {
   ASSERT( myHomardIteration );
   return CORBA::string_dup( myHomardIteration->GetName().c_str() );
 }
-
+//=============================================================================
+CORBA::Long  HOMARD_Iteration_i::Delete( CORBA::Long Option )
+{
+  ASSERT( myHomardIteration );
+  char* IterName = GetName() ;
+  MESSAGE ( "Delete : destruction de l'iteration " << IterName << ", Option = " << Option );
+  return _gen_i->DeleteIteration(IterName, Option) ;
+}
 //=============================================================================
 char* HOMARD_Iteration_i::GetDumpPython()
 {
   ASSERT( myHomardIteration );
   return CORBA::string_dup( myHomardIteration->GetDumpPython().c_str() );
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetEtat( CORBA::Boolean Etat )
+std::string HOMARD_Iteration_i::Dump() const
+{
+  return HOMARD::Dump( *myHomardIteration );
+}
+//=============================================================================
+bool HOMARD_Iteration_i::Restore( const std::string& stream )
+{
+  return HOMARD::Restore( *myHomardIteration, stream );
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration_i::SetDirNameLoc( const char* NomDir )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetEtat( Etat );
+  myHomardIteration->SetDirNameLoc( NomDir );
 }
-
 //=============================================================================
-CORBA::Boolean HOMARD_Iteration_i::GetEtat()
+char* HOMARD_Iteration_i::GetDirNameLoc()
 {
   ASSERT( myHomardIteration );
-  return CORBA::Boolean( myHomardIteration->GetEtat());
+  return CORBA::string_dup( myHomardIteration->GetDirNameLoc().c_str() );
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetDirName()
+{
+  ASSERT( myHomardIteration );
+  std::string casename = myHomardIteration->GetCaseName() ;
+  HOMARD::HOMARD_Cas_ptr caseiter = _gen_i->GetCase(casename.c_str()) ;
+  std::string dirnamecase = caseiter->GetDirName() ;
+  std::string dirname = dirnamecase + "/" +  GetDirNameLoc() ;
+  return CORBA::string_dup( dirname.c_str() );
 }
-
 //=============================================================================
 void HOMARD_Iteration_i::SetNumber( CORBA::Long NumIter )
 {
   ASSERT( myHomardIteration );
   myHomardIteration->SetNumber( NumIter );
 }
-
 //=============================================================================
 CORBA::Long HOMARD_Iteration_i::GetNumber()
 {
   ASSERT( myHomardIteration );
-  return  myHomardIteration->GetNumber() ;
+  return myHomardIteration->GetNumber() ;
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetState( CORBA::Long Etat )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetState( Etat );
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetState()
+{
+  ASSERT( myHomardIteration );
+  return myHomardIteration->GetState() ;
 }
-
 //=============================================================================
 void HOMARD_Iteration_i::SetMeshName( const char* NomMesh )
 {
   ASSERT( myHomardIteration );
   myHomardIteration->SetMeshName( NomMesh );
 }
-
 //=============================================================================
 char* HOMARD_Iteration_i::GetMeshName()
 {
   ASSERT( myHomardIteration );
   return CORBA::string_dup( myHomardIteration->GetMeshName().c_str() );
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetIterParent()
+void HOMARD_Iteration_i::SetMeshFile( const char* MeshFile )
 {
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetIterParent().c_str() );
-
+  myHomardIteration->SetMeshFile( MeshFile );
 }
-
 //=============================================================================
-HOMARD::listeIterFilles* HOMARD_Iteration_i::GetIterations()
+char* HOMARD_Iteration_i::GetMeshFile()
 {
   ASSERT( myHomardIteration );
-  const std::list<std::string>& maListe = myHomardIteration->GetIterations();
-  HOMARD::listeIterFilles_var aResult = new HOMARD::listeIterFilles;
-  aResult->length( maListe.size() );
+  return CORBA::string_dup( myHomardIteration->GetMeshFile().c_str() );
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetFieldFile( const char* FieldFile )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetFieldFile( FieldFile );
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetFieldFile()
+{
+  ASSERT( myHomardIteration );
+  return CORBA::string_dup( myHomardIteration->GetFieldFile().c_str() );
+}
+//=============================================================================
+// Instants pour le champ de pilotage
+//=============================================================================
+void HOMARD_Iteration_i::SetTimeStep( CORBA::Long TimeStep )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetTimeStep( TimeStep );
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetTimeStepRank( CORBA::Long TimeStep, CORBA::Long Rank )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetTimeStepRank( TimeStep, Rank );
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetTimeStepRankLast()
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetTimeStepRankLast();
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetTimeStep()
+{
+  ASSERT( myHomardIteration );
+  return  CORBA::Long( myHomardIteration->GetTimeStep() );
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetRank()
+{
+  ASSERT( myHomardIteration );
+  return  CORBA::Long( myHomardIteration->GetRank() );
+}
+//=============================================================================
+// Instants pour un champ a interpoler
+//=============================================================================
+void HOMARD_Iteration_i::SetFieldInterpTimeStep( const char* FieldInterp, CORBA::Long TimeStep )
+{
+  SetFieldInterpTimeStepRank( FieldInterp, TimeStep, TimeStep );
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetFieldInterpTimeStepRank( const char* FieldInterp, CORBA::Long TimeStep, CORBA::Long Rank )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetFieldInterpTimeStepRank( FieldInterp, TimeStep, Rank );
+}
+//=============================================================================
+HOMARD::listeFieldInterpTSRsIter* HOMARD_Iteration_i::GetFieldInterpsTimeStepRank()
+{
+  ASSERT( myHomardIteration );
+  const std::list<std::string>& ListString = myHomardIteration->GetFieldInterpsTimeStepRank();
+  HOMARD::listeFieldInterpTSRsIter_var aResult = new HOMARD::listeFieldInterpTSRsIter;
+  aResult->length( ListString.size() );
   std::list<std::string>::const_iterator it;
   int i = 0;
-  for ( it = maListe.begin(); it != maListe.end(); it++ )
+  for ( it = ListString.begin(); it != ListString.end(); it++ )
   {
     aResult[i++] = CORBA::string_dup( (*it).c_str() );
   }
   return aResult._retn();
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetIterParent( const char* NomIterParent )
+void HOMARD_Iteration_i::SetFieldInterp( const char* FieldInterp )
+{
+  myHomardIteration->SetFieldInterp( FieldInterp );
+}
+//=============================================================================
+HOMARD::listeFieldInterpsIter* HOMARD_Iteration_i::GetFieldInterps()
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetIterParent( NomIterParent );
+  const std::list<std::string>& ListString = myHomardIteration->GetFieldInterps();
+  HOMARD::listeFieldInterpsIter_var aResult = new HOMARD::listeFieldInterpsIter;
+  aResult->length( ListString.size() );
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for ( it = ListString.begin(); it != ListString.end(); it++ )
+  {
+    aResult[i++] = CORBA::string_dup( (*it).c_str() );
+  }
+  return aResult._retn();
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::AddIteration( const char* NomIter )
+void HOMARD_Iteration_i::SupprFieldInterps()
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->AddIteration( NomIter );
+  myHomardIteration->SupprFieldInterps();
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetLogFile( const char* LogFile )
+{
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetLogFile( LogFile );
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetLogFile()
+{
+  ASSERT( myHomardIteration );
+  return CORBA::string_dup( myHomardIteration->GetLogFile().c_str() );
 }
-
 //=============================================================================
-CORBA::Long  HOMARD_Iteration_i::Compute(CORBA::Long etatMenage)
+CORBA::Long HOMARD_Iteration_i::Compute(CORBA::Long etatMenage, CORBA::Long Option)
 {
-  MESSAGE ( "Compute : calcul d'une iteration" );
+  MESSAGE ( "Compute : calcul d'une iteration, etatMenage = "<<etatMenage<<", Option = "<<Option );
   ASSERT( myHomardIteration );
 //
 // Nom de l'iteration
   char* IterName = GetName() ;
-  MESSAGE ( ". IterName = " << IterName );
-// B. Calcul : on passe par la methode sur l'objet HOMARD
-// Il serait plus elegant de tout faire ici, mais il est complexe de paser tout le contexte
-  return _gen_i->Compute(IterName, etatMenage) ;
+  CORBA::Long modeHOMARD = 1 ;
+  CORBA::Long Option1 = 1 ;
+  MESSAGE ( "Compute : calcul de l'teration " << IterName );
+  return _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option1, Option) ;
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetMeshFile( const char* MeshFile )
+void HOMARD_Iteration_i::MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte)
 {
+  MESSAGE ( "MeshInfo : information sur le maillage associe a une iteration" );
   ASSERT( myHomardIteration );
-  myHomardIteration->SetMeshFile( MeshFile );
+//
+  int Option = 1 ;
+  MeshInfoOption( Qual, Diam, Conn, Tail, Inte, Option ) ;
+//
+  return ;
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetMeshFile()
+void HOMARD_Iteration_i::MeshInfoOption(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte, CORBA::Long Option)
 {
+  MESSAGE ( "MeshInfoOption : information sur le maillage associe a une iteration" );
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetMeshFile().c_str() );
+//
+// Nom de l'iteration
+  char* IterName = GetName() ;
+  CORBA::Long etatMenage = -1 ;
+  CORBA::Long modeHOMARD = 7 ;
+  if ( Qual != 0 ) { modeHOMARD = modeHOMARD*5 ; }
+  if ( Diam != 0 ) { modeHOMARD = modeHOMARD*19 ; }
+  if ( Conn != 0 ) { modeHOMARD = modeHOMARD*11 ; }
+  if ( Tail != 0 ) { modeHOMARD = modeHOMARD*13 ; }
+  if ( Inte != 0 ) { modeHOMARD = modeHOMARD*3 ; }
+  MESSAGE ( "MeshInfoOption : information sur le maillage de l'iteration " << IterName );
+  CORBA::Long Option2 = 1 ;
+  CORBA::Long codret = _gen_i->Compute(IterName, etatMenage, modeHOMARD, Option, Option2) ;
+  MESSAGE ( "MeshInfoOption : codret = " << codret );
+//
+  return ;
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetCaseName()
+void HOMARD_Iteration_i::SetFileInfo( const char* FileInfo )
 {
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetCaseName().c_str() );
+  myHomardIteration->SetFileInfo( FileInfo );
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetCaseName( const char* NomCas )
+char* HOMARD_Iteration_i::GetFileInfo()
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetCaseName( NomCas );
+  return CORBA::string_dup( myHomardIteration->GetFileInfo().c_str() );
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetDirName()
+//=============================================================================
+// Liens avec les autres iterations
+//=============================================================================
+//=============================================================================
+HOMARD::HOMARD_Iteration_ptr HOMARD_Iteration_i::NextIteration( const char* IterName )
 {
-  ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetDirName().c_str() );
+// Nom de l'iteration parent
+  char* NomIterParent = GetName() ;
+  MESSAGE ( "NextIteration : creation de l'iteration " << IterName << " comme fille de " << NomIterParent );
+  return _gen_i->CreateIteration(IterName, NomIterParent) ;
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetDirName( const char* NomDir )
+void HOMARD_Iteration_i::LinkNextIteration( const char* NomIteration )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetDirName( NomDir );
+  myHomardIteration->LinkNextIteration( NomIteration );
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetHypoName()
+void HOMARD_Iteration_i::UnLinkNextIteration( const char* NomIteration )
 {
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetHypoName().c_str() );
-
+  myHomardIteration->UnLinkNextIteration( NomIteration );
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetHypoName( const char* NomHypo )
+HOMARD::listeIterFilles* HOMARD_Iteration_i::GetIterations()
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetHypoName( NomHypo );
+  const std::list<std::string>& maListe = myHomardIteration->GetIterations();
+  HOMARD::listeIterFilles_var aResult = new HOMARD::listeIterFilles;
+  aResult->length( maListe.size() );
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for ( it = maListe.begin(); it != maListe.end(); it++ )
+  {
+    aResult[i++] = CORBA::string_dup( (*it).c_str() );
+  }
+  return aResult._retn();
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetFieldFile( const char* FieldFile )
+void HOMARD_Iteration_i::SetIterParentName( const char* NomIterParent )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetFieldFile( FieldFile );
+  myHomardIteration->SetIterParentName( NomIterParent );
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetFieldFile()
+char* HOMARD_Iteration_i::GetIterParentName()
 {
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetFieldFile().c_str() );
+  return CORBA::string_dup( myHomardIteration->GetIterParentName().c_str() );
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetTimeStepRank( CORBA::Long TimeStep, CORBA::Long Rank )
+HOMARD::HOMARD_Iteration_ptr HOMARD_Iteration_i::GetIterParent()
+{
+// Nom de l'iteration parent
+  char* NomIterParent = GetIterParentName() ;
+  MESSAGE ( "GetIterParent : NomIterParent = " << NomIterParent );
+  return _gen_i->GetIteration(NomIterParent) ;
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration_i::SetCaseName( const char* NomCas )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetTimeStepRank( TimeStep, Rank );
+  myHomardIteration->SetCaseName( NomCas );
 }
-
 //=============================================================================
-CORBA::Long HOMARD_Iteration_i::GetTimeStep()
+char* HOMARD_Iteration_i::GetCaseName()
 {
   ASSERT( myHomardIteration );
-  return  CORBA::Long( myHomardIteration->GetTimeStep() );
+  return CORBA::string_dup( myHomardIteration->GetCaseName().c_str() );
 }
-
 //=============================================================================
-CORBA::Long HOMARD_Iteration_i::GetRank()
+void HOMARD_Iteration_i::AssociateHypo( const char* NomHypo )
 {
   ASSERT( myHomardIteration );
-  return  CORBA::Long( myHomardIteration->GetRank() );
+//
+// Nom de l'iteration
+  char* IterName = GetName() ;
+  MESSAGE ( ". IterName = " << IterName );
+  return _gen_i->AssociateIterHypo(IterName, NomHypo) ;
 }
-
 //=============================================================================
-void HOMARD_Iteration_i::SetMessFile( const char* MessFile )
+void HOMARD_Iteration_i::SetHypoName( const char* NomHypo )
 {
   ASSERT( myHomardIteration );
-  myHomardIteration->SetMessFile( MessFile );
+  myHomardIteration->SetHypoName( NomHypo );
 }
-
 //=============================================================================
-char* HOMARD_Iteration_i::GetMessFile()
+char* HOMARD_Iteration_i::GetHypoName()
 {
   ASSERT( myHomardIteration );
-  return CORBA::string_dup( myHomardIteration->GetMessFile().c_str() );
+  return CORBA::string_dup( myHomardIteration->GetHypoName().c_str() );
 }
 //=============================================================================
-std::string HOMARD_Iteration_i::Dump() const
+//=============================================================================
+// Divers
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration_i::SetInfoCompute( CORBA::Long MessInfo )
 {
-  return HOMARD::Dump( *myHomardIteration );
+  ASSERT( myHomardIteration );
+  myHomardIteration->SetInfoCompute( MessInfo );
 }
-
 //=============================================================================
-bool HOMARD_Iteration_i::Restore( const std::string& stream )
+CORBA::Long HOMARD_Iteration_i::GetInfoCompute()
 {
-  return HOMARD::Restore( *myHomardIteration, stream );
+  ASSERT( myHomardIteration );
+  return myHomardIteration->GetInfoCompute() ;
 }
index 859032740583de915e1a674fe620d587ff54d068..629ebc555ac753f7f2f81b7d4bce34cd6ce0c7e6 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_ITERATION_I_HXX_
 #define _HOMARD_ITERATION_I_HXX_
 
@@ -24,6 +34,7 @@
 #include CORBA_SERVER_HEADER(HOMARD_Gen)
 #include CORBA_SERVER_HEADER(HOMARD_Iteration)
 
+#include "HOMARD_i.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -32,7 +43,7 @@
 
 class HOMARD_Iteration;
 
-class HOMARD_Iteration_i:
+class HOMARDENGINE_EXPORT HOMARD_Iteration_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Iteration,
   public virtual PortableServer::ServantBase
@@ -44,16 +55,29 @@ public:
 
   virtual ~HOMARD_Iteration_i();
 
-  void                   SetName( const char* NomIteration );
+// Generalites
+  void                   SetName( const char* Name );
   char*                  GetName();
+
+  CORBA::Long            Delete( CORBA::Long Option );
+
   char*                  GetDumpPython();
 
-  void                   SetEtat( CORBA::Boolean etat );
-  CORBA::Boolean         GetEtat();
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
+
+// Caracteristiques
+  void                   SetDirNameLoc( const char* NomDir );
+  char*                  GetDirNameLoc();
+
+  char*                  GetDirName();
 
   void                   SetNumber( CORBA::Long NumIter );
   CORBA::Long            GetNumber();
 
+  void                   SetState( CORBA::Long etat );
+  CORBA::Long            GetState();
+
   void                   SetMeshName( const char* NomMesh );
   char*                  GetMeshName();
 
@@ -62,32 +86,54 @@ public:
 
   void                   SetFieldFile( const char* FieldFile );
   char*                  GetFieldFile();
+// Instants pour le champ de pilotage
+  void                   SetTimeStep( CORBA::Long TimeStep );
   void                   SetTimeStepRank( CORBA::Long TimeStep, CORBA::Long Rank );
+  void                   SetTimeStepRankLast();
   CORBA::Long            GetTimeStep();
   CORBA::Long            GetRank();
+// Instants pour un champ a interpoler
+  void                   SetFieldInterpTimeStep( const char* FieldInterp, CORBA::Long TimeStep );
+  void                   SetFieldInterpTimeStepRank( const char* FieldInterp, CORBA::Long TimeStep, CORBA::Long Rank );
+  HOMARD::listeFieldInterpTSRsIter* GetFieldInterpsTimeStepRank();
+  void                   SetFieldInterp( const char* FieldInterp );
+  HOMARD::listeFieldInterpsIter* GetFieldInterps();
+  void                   SupprFieldInterps();
 
-  void                   SetMessFile( const char* MessFile );
-  char*                  GetMessFile();
+  void                   SetLogFile( const char* LogFile );
+  char*                  GetLogFile();
 
-  void                   SetIterParent( const char* NomIterParent );
-  char*                  GetIterParent();
+  CORBA::Long            Compute(CORBA::Long etatMenage, CORBA::Long Option);
 
-  void                   AddIteration( const char* NomIteration );
+  void                   MeshInfo(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte);
+
+  void                   MeshInfoOption(CORBA::Long Qual, CORBA::Long Diam, CORBA::Long Conn, CORBA::Long Tail, CORBA::Long Inte, CORBA::Long Option);
+
+  void                   SetFileInfo( const char* FileInfo );
+  char*                  GetFileInfo();
+
+  // Liens avec les autres iterations
+  HOMARD::HOMARD_Iteration_ptr NextIteration( const char* Name) ;
+
+  void                   LinkNextIteration( const char* NomIteration );
+  void                   UnLinkNextIteration( const char* NomIteration );
   HOMARD::listeIterFilles* GetIterations();
 
+  void                   SetIterParentName( const char* NomIterParent );
+  char*                  GetIterParentName();
+  HOMARD::HOMARD_Iteration_ptr GetIterParent() ;
+
+// Liens avec les autres structures
   void                   SetCaseName( const char* NomCas );
   char*                  GetCaseName();
 
-  void                   SetDirName( const char* NomDir );
-  char*                  GetDirName();
-
+  void                   AssociateHypo( const char* NomHypo);
   void                   SetHypoName( const char* NomHypo );
   char*                  GetHypoName();
 
-  CORBA::Long            Compute(CORBA::Long etatMenage);
-
-  std::string            Dump() const;
-  bool                   Restore( const std::string& stream );
+// Divers
+  void                   SetInfoCompute( CORBA::Long MessInfo );
+  CORBA::Long            GetInfoCompute();
 
 private:
   ::HOMARD_Iteration*    myHomardIteration;
diff --git a/src/HOMARD_I/HOMARD_YACS_i.cxx b/src/HOMARD_I/HOMARD_YACS_i.cxx
new file mode 100644 (file)
index 0000000..f82b19c
--- /dev/null
@@ -0,0 +1,279 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
+#include "HOMARD_YACS_i.hxx"
+#include "HOMARD_Gen_i.hxx"
+#include "HOMARD_YACS.hxx"
+#include "HOMARD_DriverTools.hxx"
+
+#include "SALOMEDS_Tool.hxx"
+
+#include "utilities.h"
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_YACS_i::HOMARD_YACS_i()
+{
+  MESSAGE( "Default constructor, not for use" );
+  ASSERT( 0 );
+}
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_YACS_i::HOMARD_YACS_i( CORBA::ORB_ptr orb,
+                                        HOMARD::HOMARD_Gen_var engine )
+{
+  MESSAGE("constructor");
+  _gen_i = engine;
+  _orb = orb;
+  myHomardYACS = new ::HOMARD_YACS();
+  ASSERT( myHomardYACS );
+}
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+HOMARD_YACS_i::~HOMARD_YACS_i()
+{
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS_i::SetName( const char* Name )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetName( Name );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetName()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetName().c_str() );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::Delete( CORBA::Long Option )
+{
+  ASSERT( myHomardYACS );
+  char* YACSName = GetName() ;
+  MESSAGE ( "Delete : destruction du schema " << YACSName << ", Option = " << Option );
+  return _gen_i->DeleteYACS(YACSName, Option) ;
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetDumpPython()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetDumpPython().c_str() );
+}
+//=============================================================================
+std::string HOMARD_YACS_i::Dump() const
+{
+  return HOMARD::Dump( *myHomardYACS );
+}
+//=============================================================================
+bool HOMARD_YACS_i::Restore( const std::string& stream )
+{
+  return HOMARD::Restore( *myHomardYACS, stream );
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS_i::SetType( CORBA::Long Type )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetType( Type );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetType()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetType() );
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques de la convergence
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS_i::SetMaxIter( CORBA::Long MaxIter )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetMaxIter( MaxIter );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxIter()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetMaxIter() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetMaxNode( CORBA::Long MaxNode )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetMaxNode( MaxNode );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxNode()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetMaxNode() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetMaxElem( CORBA::Long MaxElem )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetMaxElem( MaxElem );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxElem()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetMaxElem() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetTestConvergence( CORBA::Long TypeTest, CORBA::Double VRef)
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetTestConvergence( TypeTest, VRef );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetTestConvergenceType()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetTestConvergenceType() );
+}
+//=============================================================================
+CORBA::Double HOMARD_YACS_i::GetTestConvergenceVRef()
+{
+  ASSERT( myHomardYACS );
+  return  CORBA::Long( myHomardYACS->GetTestConvergenceVRef() );
+}
+//=============================================================================
+//=============================================================================
+// Repertoire et fichiers
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS_i::SetDirName( const char* NomDir )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetDirName( NomDir );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetDirName()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetDirName().c_str() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetMeshFile( const char* MeshFile )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetMeshFile( MeshFile );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetMeshFile()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetMeshFile().c_str() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetScriptFile( const char* ScriptFile )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetScriptFile( ScriptFile );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetScriptFile()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetScriptFile().c_str() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetXMLFile( const char* XMLFile )
+{
+  ASSERT( myHomardYACS );
+  MESSAGE ( "SetXMLFile : SetXMLFile = " << XMLFile );
+  myHomardYACS->SetXMLFile( XMLFile );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetXMLFile()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetXMLFile().c_str() );
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_YACS_i::SetCaseName( const char* NomCas )
+{
+  ASSERT( myHomardYACS );
+  myHomardYACS->SetCaseName( NomCas );
+}
+//=============================================================================
+char* HOMARD_YACS_i::GetCaseName()
+{
+  ASSERT( myHomardYACS );
+  return CORBA::string_dup( myHomardYACS->GetCaseName().c_str() );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::Write()
+{
+//
+  char* nomYACS = GetName() ;
+  return _gen_i->YACSWrite(nomYACS) ;
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::WriteOnFile( const char* XMLFile )
+{
+  MESSAGE ( "WriteOnFile : ecriture du schema sur " << XMLFile );
+  ASSERT( myHomardYACS );
+//
+// Memorisation du fichier associe
+  SetXMLFile( XMLFile ) ;
+//
+// Nom du schema
+  char* nomYACS = GetName() ;
+  return _gen_i->YACSWriteOnFile(nomYACS, XMLFile) ;
+}
+//=============================================================================
+//=============================================================================
+//=============================================================================
+// Divers
+//=============================================================================
+//=============================================================================
diff --git a/src/HOMARD_I/HOMARD_YACS_i.hxx b/src/HOMARD_I/HOMARD_YACS_i.hxx
new file mode 100644 (file)
index 0000000..e32184b
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
+#ifndef _HOMARD_YACS_I_HXX_
+#define _HOMARD_YACS_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(HOMARD_Gen)
+#include CORBA_SERVER_HEADER(HOMARD_YACS)
+
+#include "HOMARD_i.hxx"
+#include "SALOME_Component_i.hxx"
+#include "SALOME_NamingService.hxx"
+#include "Utils_CorbaException.hxx"
+
+#include <string>
+
+class HOMARD_YACS;
+
+class HOMARDENGINE_EXPORT HOMARD_YACS_i:
+  public virtual Engines_Component_i,
+  public virtual POA_HOMARD::HOMARD_YACS,
+  public virtual PortableServer::ServantBase
+{
+public:
+  HOMARD_YACS_i( CORBA::ORB_ptr orb,
+                      HOMARD::HOMARD_Gen_var gen_i );
+  HOMARD_YACS_i();
+
+  virtual ~HOMARD_YACS_i();
+
+// Generalites
+  void                   SetName( const char* Name );
+  char*                  GetName();
+
+  CORBA::Long            Delete( CORBA::Long Option );
+
+  char*                  GetDumpPython();
+
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
+
+// Caracteristiques
+  void                   SetType( CORBA::Long Type );
+  CORBA::Long            GetType();
+
+  void                   SetMaxIter( CORBA::Long MaxIter );
+  CORBA::Long            GetMaxIter();
+  void                   SetMaxNode( CORBA::Long MaxNode );
+  CORBA::Long            GetMaxNode();
+  void                   SetMaxElem( CORBA::Long MaxElem );
+  CORBA::Long            GetMaxElem();
+
+  void                   SetTestConvergence( CORBA::Long TypeTest, CORBA::Double VRef );
+  CORBA::Long            GetTestConvergenceType();
+  CORBA::Double          GetTestConvergenceVRef();
+
+  void                   SetDirName( const char* NomDir );
+  char*                  GetDirName();
+
+  void                   SetMeshFile( const char* MeshFile );
+  char*                  GetMeshFile();
+
+  void                   SetScriptFile( const char* ScriptFile );
+  char*                  GetScriptFile();
+
+  void                   SetXMLFile( const char* XMLFile );
+  char*                  GetXMLFile();
+
+  CORBA::Long            Write() ;
+  CORBA::Long            WriteOnFile( const char* XMLFile ) ;
+
+  // Liens avec les autres structures
+  void                   SetCaseName( const char* NomCas );
+  char*                  GetCaseName();
+
+// Divers
+
+private:
+  ::HOMARD_YACS*    myHomardYACS;
+
+  CORBA::ORB_ptr         _orb;
+  HOMARD::HOMARD_Gen_var _gen_i;
+};
+
+#endif
index 1dbab43d98585999d999ad4171e2a5446b0ba2d1..7f6d60d99f9e6a086012528f1aa6a47cd779b49f 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #include "HOMARD_Zone_i.hxx"
 #include "HOMARD_Gen_i.hxx"
 #include "HOMARD_Zone.hxx"
@@ -58,74 +68,68 @@ HOMARD_Zone_i::HOMARD_Zone_i( CORBA::ORB_ptr orb,
 HOMARD_Zone_i::~HOMARD_Zone_i()
 {
 }
-
 //=============================================================================
-/*!
- */
 //=============================================================================
-void HOMARD_Zone_i::SetName( const char* NomZone )
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Zone_i::SetName( const char* Name )
 {
   ASSERT( myHomardZone );
-  myHomardZone->SetName( NomZone );
+  myHomardZone->SetName( Name );
 }
-
 //=============================================================================
 char* HOMARD_Zone_i::GetName()
 {
   ASSERT( myHomardZone );
   return CORBA::string_dup( myHomardZone->GetName().c_str() );
 }
-
+//=============================================================================
+CORBA::Long HOMARD_Zone_i::Delete()
+{
+  ASSERT( myHomardZone );
+  char* ZoneName = GetName() ;
+  MESSAGE ( "Delete : destruction de la zone " << ZoneName );
+  return _gen_i->DeleteZone(ZoneName) ;
+}
 //=============================================================================
 char* HOMARD_Zone_i::GetDumpPython()
 {
   ASSERT( myHomardZone );
   return CORBA::string_dup( myHomardZone->GetDumpPython().c_str() );
 }
-
-
 //=============================================================================
-void HOMARD_Zone_i::SetZoneType( CORBA::Long ZoneType )
+std::string HOMARD_Zone_i::Dump() const
 {
-  ASSERT( myHomardZone );
-  myHomardZone->SetZoneType( ZoneType );
+  return HOMARD::Dump( *myHomardZone );
 }
-
 //=============================================================================
-CORBA::Long HOMARD_Zone_i::GetZoneType()
+bool HOMARD_Zone_i::Restore( const std::string& stream )
 {
-  ASSERT( myHomardZone );
-  return  CORBA::Long( myHomardZone->GetZoneType() );
+  return HOMARD::Restore( *myHomardZone, stream );
 }
-
 //=============================================================================
-void HOMARD_Zone_i::SetBox( double X0, double X1, double X2, double X3, double X4, double X5 )
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Zone_i::SetType( CORBA::Long Type )
 {
   ASSERT( myHomardZone );
-  myHomardZone->SetBox( X0, X1, X2, X3, X4, X5 );
+  myHomardZone->SetType( Type );
 }
-
 //=============================================================================
-HOMARD::double_array* HOMARD_Zone_i::GetCoords()
+CORBA::Long HOMARD_Zone_i::GetType()
 {
   ASSERT( myHomardZone );
-  HOMARD::double_array_var aResult = new HOMARD::double_array();
-  std::vector<double> mesCoor = myHomardZone->GetCoords();
-  aResult->length( mesCoor .size() );
-  std::vector<double>::const_iterator it;
-  int i = 0;
-  for ( it = mesCoor.begin(); it != mesCoor.end(); it++ )
-    aResult[i++] = (*it);
-  return aResult._retn();
+  return  CORBA::Long( myHomardZone->GetType() );
 }
-
 //=============================================================================
-void HOMARD_Zone_i::SetSphere( double Xcentre, double Ycentre, double Zcentre, double Rayon )
+void HOMARD_Zone_i::SetBox( double X0, double X1, double X2, double X3, double X4, double X5 )
 {
   ASSERT( myHomardZone );
-  myHomardZone->SetSphere( Xcentre, Ycentre, Zcentre, Rayon );
+  myHomardZone->SetBox( X0, X1, X2, X3, X4, X5 );
 }
-
 //=============================================================================
 void HOMARD_Zone_i::SetCylinder( double Xcentre, double Ycentre, double Zcentre,
                                  double Xaxis, double Yaxis, double Zaxis,
@@ -142,7 +146,25 @@ void HOMARD_Zone_i::SetPipe( double Xcentre, double Ycentre, double Zcentre,
   ASSERT( myHomardZone );
   myHomardZone->SetPipe( Xcentre, Ycentre, Zcentre, Xaxis, Yaxis, Zaxis, Rayon, Haut, Rayonint );
 }
-
+//=============================================================================
+void HOMARD_Zone_i::SetSphere( double Xcentre, double Ycentre, double Zcentre, double Rayon )
+{
+  ASSERT( myHomardZone );
+  myHomardZone->SetSphere( Xcentre, Ycentre, Zcentre, Rayon );
+}
+//=============================================================================
+HOMARD::double_array* HOMARD_Zone_i::GetCoords()
+{
+  ASSERT( myHomardZone );
+  HOMARD::double_array_var aResult = new HOMARD::double_array();
+  std::vector<double> mesCoor = myHomardZone->GetCoords();
+  aResult->length( mesCoor .size() );
+  std::vector<double>::const_iterator it;
+  int i = 0;
+  for ( it = mesCoor.begin(); it != mesCoor.end(); it++ )
+    aResult[i++] = (*it);
+  return aResult._retn();
+}
 //=============================================================================
 void HOMARD_Zone_i::SetLimit( double Xincr, double Yincr, double Zincr )
 {
@@ -150,7 +172,6 @@ void HOMARD_Zone_i::SetLimit( double Xincr, double Yincr, double Zincr )
   ASSERT( myHomardZone );
   myHomardZone->SetLimit( Xincr, Yincr, Zincr );
 }
-
 //=============================================================================
 HOMARD::double_array* HOMARD_Zone_i::GetLimit()
 {
@@ -164,21 +185,16 @@ HOMARD::double_array* HOMARD_Zone_i::GetLimit()
     aResult[i++] = (*it);
   return aResult._retn();
 }
-
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
 //=============================================================================
 void HOMARD_Zone_i::AddHypo( const char* NomHypo )
 {
   MESSAGE ( " AddHypo, NomHypo= " << NomHypo);
   ASSERT( myHomardZone );
   myHomardZone->AddHypo( NomHypo );
-  MESSAGE ( " FIn de AddHypo");
-}
-
-//=============================================================================
-void HOMARD_Zone_i::SupprHypo( const char* NomHypo )
-{
-  ASSERT( myHomardZone );
-  myHomardZone->SupprHypo( NomHypo );
 }
 //=============================================================================
 HOMARD::listeHypo* HOMARD_Zone_i::GetHypo()
@@ -193,15 +209,10 @@ HOMARD::listeHypo* HOMARD_Zone_i::GetHypo()
     aResult[i++] = CORBA::string_dup( (*it).c_str() );
   return aResult._retn();
 }
-
 //=============================================================================
-std::string HOMARD_Zone_i::Dump() const
+void HOMARD_Zone_i::SupprHypo( const char* NomHypo )
 {
-  return HOMARD::Dump( *myHomardZone );
+  ASSERT( myHomardZone );
+  myHomardZone->SupprHypo( NomHypo );
 }
 
-//=============================================================================
-bool HOMARD_Zone_i::Restore( const std::string& stream )
-{
-  return HOMARD::Restore( *myHomardZone, stream );
-}
index 63526668ccbdc5b8cace5c5126074905b8aca4da..cf5f49749811645919f50344820fc8982d84f91a 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+// Remarques :
+// L'ordre de description des fonctions est le meme dans tous les fichiers
+// HOMARD_aaaa.idl, HOMARD_aaaa.hxx, HOMARD_aaaa.cxx, HOMARD_aaaa_i.hxx, HOMARD_aaaa_i.cxx :
+// 1. Les generalites : Name, Delete, DumpPython, Dump, Restore
+// 2. Les caracteristiques
+// 3. Le lien avec les autres structures
+//
+// Quand les 2 fonctions Setxxx et Getxxx sont presentes, Setxxx est decrit en premier
+//
+
 #ifndef _HOMARD_Zone_I_HXX_
 #define _HOMARD_Zone_I_HXX_
 
@@ -24,6 +34,7 @@
 #include CORBA_SERVER_HEADER(HOMARD_Gen)
 #include CORBA_SERVER_HEADER(HOMARD_Zone)
 
+#include "HOMARD_i.hxx"
 #include "SALOME_Component_i.hxx"
 #include "SALOME_NamingService.hxx"
 #include "Utils_CorbaException.hxx"
@@ -32,7 +43,7 @@
 
 class HOMARD_Zone;
 
-class HOMARD_Zone_i:
+class HOMARDENGINE_EXPORT HOMARD_Zone_i:
   public virtual Engines_Component_i,
   public virtual POA_HOMARD::HOMARD_Zone,
   public virtual PortableServer::ServantBase
@@ -43,38 +54,45 @@ public:
 
   virtual ~HOMARD_Zone_i();
 
-  void                   SetName( const char* NomZone );
+// Generalites
+  void                   SetName( const char* Name );
   char*                  GetName();
+
+  CORBA::Long            Delete();
+
   char*                  GetDumpPython();
 
-  void                   SetZoneType( CORBA::Long ZoneType );
+  std::string            Dump() const;
+  bool                   Restore( const std::string& stream );
 
-  CORBA::Long            GetZoneType();
+// Caracteristiques
+  void                   SetType( CORBA::Long Type );
+  CORBA::Long            GetType();
 
-  HOMARD::double_array*  GetCoords();
   void                   SetBox( double Xmini, double Xmaxi,
                                  double Ymini, double Ymaxi,
                                  double Zmini, double Zmaxi );
 
-  void                   SetSphere( double Xcentre, double Ycentre, double ZCentre,
-                                    double Rayon );
-
   void                   SetCylinder( double Xcentre, double Ycentre, double ZCentre,
                                       double Xaxis, double Yaxis, double Zaxis,
                                       double Rayon, double Haut );
+
   void                   SetPipe( double Xcentre, double Ycentre, double ZCentre,
                                   double Xaxis, double Yaxis, double Zaxis,
                                   double Rayon, double Haut, double Rayonint );
 
-  HOMARD::double_array*  GetLimit();
+  void                   SetSphere( double Xcentre, double Ycentre, double ZCentre,
+                                    double Rayon );
+
+  HOMARD::double_array*  GetCoords();
+
   void                   SetLimit( double Xincr, double Yincr, double Zincr);
+  HOMARD::double_array*  GetLimit();
 
+// Liens avec les autres structures
   void                   AddHypo( const char *NomHypo );
-  void                   SupprHypo( const char *NomHypo );
   HOMARD::listeHypo*     GetHypo();
-
-  std::string            Dump() const;
-  bool                   Restore( const std::string& stream );
+  void                   SupprHypo( const char *NomHypo );
 
 private:
   ::HOMARD_Zone*         myHomardZone;
diff --git a/src/HOMARD_I/HOMARD_i.hxx b/src/HOMARD_I/HOMARD_i.hxx
new file mode 100755 (executable)
index 0000000..62fcee3
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _HOMARD_I_HXX_
+#define _HOMARD_I_HXX_
+
+#ifdef WIN32
+  #if defined HOMARDENGINE_EXPORTS || defined HOMARDEngine_EXPORTS
+    #define HOMARDENGINE_EXPORT __declspec( dllexport )
+  #else
+    #define HOMARDENGINE_EXPORT __declspec( dllimport )
+  #endif
+#else
+   #define HOMARDENGINE_EXPORT
+#endif
+
+#endif //_HOMARD_I_HXX_
+
+
index 8aab75c352fb6c724f0553d693f2338228b1709e..2d9edef3918e4826d137b84be084edd0dddb13fa 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <cstring>
 #include <algorithm>
 
-extern "C" 
-{
 #include <med.h>
-}
 
 #include "utilities.h"
 // =======================================================================
+int MEDFileExist( const char * aFile )
+// Retourne 1 si le fichier existe, 0 sinon
+// =======================================================================
+{
+  int existe ;
+  med_idt medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
+  if ( medIdt < 0 ) { existe = 0 ; }
+  else              { MEDfileClose(medIdt);
+                      existe = 1 ; }
+  return existe ;
+}
+// =======================================================================
 std::set<std::string> GetListeGroupesInMedFile(const char * aFile)
 // =======================================================================
 {
   std::set<std::string> ListeGroupes;
-  med_idt medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
-  if ( medIdt < 0 ) { return ListeGroupes; };
-
-  char meshname[MED_NAME_SIZE+1];
-  med_int spacedim,meshdim;
-  med_mesh_type meshtype;
-  char descriptionription[MED_COMMENT_SIZE+1];
-  char dtunit[MED_SNAME_SIZE+1];
-  med_sorting_type sortingtype;
-  med_int nstep;
-  med_axis_type axistype;
-  int naxis = MEDmeshnAxis(medIdt,1);
-  char *axisname=new char[naxis*MED_SNAME_SIZE+1];
-  char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
-  med_err aRet = MEDmeshInfo(medIdt,
-                          1,
-                          meshname,
-                          &spacedim,
-                          &meshdim,
-                          &meshtype,
-                          descriptionription,
-                          dtunit,
-                          &sortingtype,
-                          &nstep,
-                          &axistype,
-                          axisname,
-                          axisunit);
-   if ( aRet < 0 ) { return ListeGroupes; };
-   
-   med_int nfam, ngro, natt;
-   if ((nfam = MEDnFamily(medIdt,meshname)) < 0) { return ListeGroupes; };
-   
-  char familyname[MED_NAME_SIZE+1];
-  med_int numfam;
-  for (int i=0;i<nfam;i++) 
+  med_err erreur = 0 ;
+  med_int medIdt ;
+  while ( erreur == 0 )
   {
-    if ((ngro = MEDnFamilyGroup(medIdt,meshname,i+1)) < 0) 
+    //  Ouverture du fichier
+    medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
+    if ( medIdt < 0 )
     {
-      // GERALD -- QMESSAGE BOX
-      std::cerr << " Error : Families are unreadable" << std::endl;
-      std::cerr << "Pb avec la famille : " << i+1 << std::endl;
-      break;
+      erreur = 1 ;
+      break ;
     }
-    if (ngro == 0) continue;
-
-    if ((natt = MEDnFamily23Attribute(medIdt,meshname,i+1)) < 0) 
+    // Caracteristiques du maillage
+    char meshname[MED_NAME_SIZE+1];
+    med_int spacedim,meshdim;
+    med_mesh_type meshtype;
+    char descriptionription[MED_COMMENT_SIZE+1];
+    char dtunit[MED_SNAME_SIZE+1];
+    med_sorting_type sortingtype;
+    med_int nstep;
+    med_axis_type axistype;
+    int naxis = MEDmeshnAxis(medIdt,1);
+    char *axisname=new char[naxis*MED_SNAME_SIZE+1];
+    char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
+    erreur = MEDmeshInfo(medIdt,
+                            1,
+                            meshname,
+                            &spacedim,
+                            &meshdim,
+                            &meshtype,
+                            descriptionription,
+                            dtunit,
+                            &sortingtype,
+                            &nstep,
+                            &axistype,
+                            axisname,
+                            axisunit);
+    delete[] axisname ;
+    delete[] axisunit ;
+    if ( erreur < 0 ) { break ; }
+    // Nombre de familles
+    med_int nfam ;
+    nfam = MEDnFamily(medIdt,meshname) ;
+    if ( nfam < 0 )
     {
-      // GERALD -- QMESSAGE BOX
-      std::cerr << " Error : Families are unreadable" << std::endl;
-      std::cerr << "Pb avec la famille : " << i+1 << std::endl;
-      break;
+      erreur = 2 ;
+      break ;
     }
-
-    med_int* attide = (med_int*) malloc(sizeof(med_int)*natt);
-    med_int* attval = (med_int*) malloc(sizeof(med_int)*natt);
-    char*    attdes = (char *)   malloc(MED_COMMENT_SIZE*natt+1);
-    char*    gro    = (char*)    malloc(MED_LNAME_SIZE*ngro+1);
-    
-    med_err aRet = MEDfamily23Info(medIdt,
-                                meshname,
-                                i+1,
-                                familyname,
-                                attide,
-                                attval,
-                                attdes,
-                                &numfam,
-                                gro);
-    
-    if (aRet < 0) 
-    { 
-      // GERALD -- QMESSAGE BOX
-      std::cerr << " Error : Families are unreadable" << std::endl;
-      std::cerr << "Pb avec la famille : " << i+1 << std::endl;
-        break;
-    }
-    free(attide);
-    free(attval);
-    free(attdes);
-    if ((numfam )> 0) { continue;} // On ne garde que les familles d elts
-
-    for (int j=0;j<ngro;j++) 
+  // Lecture des caracteristiques des familles
+    for (int i=0;i<nfam;i++)
     {
-          char str2[MED_LNAME_SIZE+1];
-          strncpy(str2,gro+j*MED_LNAME_SIZE,MED_LNAME_SIZE);
-          str2[MED_LNAME_SIZE] = '\0';
-          ListeGroupes.insert(std::string(str2));
+//       Lecture du nombre de groupes
+      med_int ngro = MEDnFamilyGroup(medIdt,meshname,i+1);
+      if ( ngro < 0 )
+      {
+        erreur = 3 ;
+        break ;
+      }
+//       Lecture de la famille
+      else if ( ngro > 0 )
+      {
+        char familyname[MED_NAME_SIZE+1];
+        med_int numfam;
+        char* gro = (char*) malloc(MED_LNAME_SIZE*ngro+1);
+        erreur = MEDfamilyInfo(medIdt,
+                               meshname,
+                               i+1,
+                               familyname,
+                               &numfam,
+                               gro);
+        if ( erreur < 0 )
+        {
+          free(gro);
+          break ;
+        }
+        // Lecture des groupes pour une famille de mailles
+        if ( numfam < 0)
+        {
+          for (int j=0;j<ngro;j++)
+          {
+            char str2[MED_LNAME_SIZE+1];
+            strncpy(str2,gro+j*MED_LNAME_SIZE,MED_LNAME_SIZE);
+            str2[MED_LNAME_SIZE] = '\0';
+            ListeGroupes.insert(std::string(str2));
+          }
+        }
+        free(gro);
+      }
     }
-    free(gro);
+    break ;
   }
-  MEDfileClose(medIdt);
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
   return ListeGroupes;
 }
 
@@ -139,150 +151,145 @@ std::vector<double> GetBoundingBoxInMedFile(const char * aFile)
 // en position 6 et 7 Zmin, Zmax et en position 8 Dz si < 0  2D
 //  9 distance max dans le maillage
 
-   std::vector<double> LesExtremes;
-   
-   // Ouverture du Fichier Med
-   med_idt medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
-   if (medIdt <0) 
-   {
-          // GERALD -- QMESSAGE BOX
-          std::cerr << "Error : mesh is unreadable" << std::endl;
-          return LesExtremes;
-   }
-
-                                // Le fichier Med est lisible
-    // Boucle sur les noms de maillage
-   med_int numberOfMeshes = MEDnMesh(medIdt) ;
-   if (numberOfMeshes != 1 ) 
-   {
-          // GERALD -- QMESSAGE BOX
-          std::cerr << "Error : file contains more than one mesh" << std::endl;
-          return LesExtremes;
-   }
-
-  char meshname[MED_NAME_SIZE+1];
-  med_int spacedim,meshdim;
-  med_mesh_type meshtype;
-  char descriptionription[MED_COMMENT_SIZE+1];
-  char dtunit[MED_SNAME_SIZE+1];
-  med_sorting_type sortingtype;
-  med_int nstep;
-  med_axis_type axistype;
-  int naxis = MEDmeshnAxis(medIdt,1);
-  char *axisname=new char[naxis*MED_SNAME_SIZE+1];
-  char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
-  med_err aRet = MEDmeshInfo(medIdt,
-                          1,
-                          meshname,
-                          &spacedim,
-                          &meshdim,
-                          &meshtype,
-                          descriptionription,
-                          dtunit,
-                          &sortingtype,
-                          &nstep,
-                          &axistype,
-                          axisname,
-                          axisunit);
-
-   if (aRet < 0) 
-   {
-          // GERALD -- QMESSAGE BOX
-          std::cerr << "Error : mesh is unreadable" << std::endl;
-          return LesExtremes;
-   }
-
-  med_bool chgt,trsf;
-  med_int nnoe  = MEDmeshnEntity(medIdt,
+  std::vector<double> LesExtremes;
+  med_err erreur = 0 ;
+  med_int medIdt ;
+  while ( erreur == 0 )
+  {
+    //  Ouverture du fichier
+    medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+    //Nombre de maillage : on ne peut en lire qu'un seul
+    med_int numberOfMeshes = MEDnMesh(medIdt) ;
+    if (numberOfMeshes != 1 )
+    {
+      erreur = 2 ;
+      break ;
+    }
+    // Caracteristiques du maillage
+    char meshname[MED_NAME_SIZE+1];
+    med_int spacedim,meshdim;
+    med_mesh_type meshtype;
+    char descriptionription[MED_COMMENT_SIZE+1];
+    char dtunit[MED_SNAME_SIZE+1];
+    med_sorting_type sortingtype;
+    med_int nstep;
+    med_axis_type axistype;
+    int naxis = MEDmeshnAxis(medIdt,1);
+    char *axisname=new char[naxis*MED_SNAME_SIZE+1];
+    char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
+    erreur = MEDmeshInfo(medIdt,
+                            1,
                             meshname,
-                            MED_NO_DT,
-                            MED_NO_IT,
-                            MED_NODE,
-                            MED_NO_GEOTYPE,
-                            MED_COORDINATE,
-                            MED_NO_CMODE,
-                            &chgt,
-                            &trsf);
-   if ( nnoe < 0) 
-   {
-          // GERALD -- QMESSAGE BOX
-          std::cerr << "Error : mesh is unreadable" << std::endl;
-          return LesExtremes;
-   }
+                            &spacedim,
+                            &meshdim,
+                            &meshtype,
+                            descriptionription,
+                            dtunit,
+                            &sortingtype,
+                            &nstep,
+                            &axistype,
+                            axisname,
+                            axisunit);
+    delete[] axisname ;
+    delete[] axisunit ;
+    if ( erreur < 0 ) { break ; }
+
+    // Nombre de noeuds
+    med_bool chgt,trsf;
+    med_int nnoe  = MEDmeshnEntity(medIdt,
+                              meshname,
+                              MED_NO_DT,
+                              MED_NO_IT,
+                              MED_NODE,
+                              MED_NO_GEOTYPE,
+                              MED_COORDINATE,
+                              MED_NO_CMODE,
+                              &chgt,
+                              &trsf);
+    if ( nnoe < 0 )
+    {
+      erreur =  4;
+      break ;
+    }
 
-  med_float* coo    = (med_float*) malloc(sizeof(med_float)*nnoe*spacedim);
+    // Les coordonnees
+    med_float* coo    = (med_float*) malloc(sizeof(med_float)*nnoe*spacedim);
 
-  aRet = MEDmeshNodeCoordinateRd(medIdt,
+    erreur = MEDmeshNodeCoordinateRd(medIdt,
                                       meshname,
                                       MED_NO_DT,
                                       MED_NO_IT,
                                       MED_NO_INTERLACE,
                                       coo);
-   if ( aRet < 0) 
-   {
-          // GERALD -- QMESSAGE BOX
-          std::cerr << "Error : mesh coordinates are unreadable" << std::endl;
-          return LesExtremes;
-   }
+    if ( erreur < 0 )
+    {
+      free(coo) ;
+      break ;
+    }
 
-   med_float xmin,xmax,ymin,ymax,zmin,zmax;
-   
-   xmin=coo[0];
-   xmax=coo[0];
-   for (int i=1;i<nnoe;i++)
-   {
-      xmin = std::min(xmin,coo[i]);
-      xmax = std::max(xmax,coo[i]);
-   }
-//
-   if (spacedim > 1)
-   {
-       ymin=coo[nnoe]; ymax=coo[nnoe];
-       for (int i=nnoe+1;i<2*nnoe;i++)
-       {
-           ymin = std::min(ymin,coo[i]);
-           ymax = std::max(ymax,coo[i]);
-       }
-   }
-   else
-   {
-       ymin=0;
-       ymax=0;
-       zmin=0;
-       zmax=0;
-   }
+    // Calcul des extremes
+    med_float xmin,xmax,ymin,ymax,zmin,zmax;
+
+    xmin=coo[0];
+    xmax=coo[0];
+    for (int i=1;i<nnoe;i++)
+    {
+        xmin = std::min(xmin,coo[i]);
+        xmax = std::max(xmax,coo[i]);
+    }
+  //
+    if (spacedim > 1)
+    {
+        ymin=coo[nnoe]; ymax=coo[nnoe];
+        for (int i=nnoe+1;i<2*nnoe;i++)
+        {
+            ymin = std::min(ymin,coo[i]);
+            ymax = std::max(ymax,coo[i]);
+        }
+    }
+    else
+    {
+        ymin=0;
+        ymax=0;
+        zmin=0;
+        zmax=0;
+    }
 //
-   if (spacedim > 2)
-   {
-       zmin=coo[2*nnoe]; zmax=coo[2*nnoe];
-       for (int i=2*nnoe+1;i<3*nnoe;i++)
-       {
-           zmin = std::min(zmin,coo[i]);
-           zmax = std::max(zmax,coo[i]);
-       }
-   }
-   else
-   {
-       zmin=0;
-       zmax=0;
-   }
-   MEDfileClose(medIdt);
+    if (spacedim > 2)
+    {
+        zmin=coo[2*nnoe]; zmax=coo[2*nnoe];
+        for (int i=2*nnoe+1;i<3*nnoe;i++)
+        {
+            zmin = std::min(zmin,coo[i]);
+            zmax = std::max(zmax,coo[i]);
+        }
+    }
+    else
+    {
+        zmin=0;
+        zmax=0;
+    }
 
-   MESSAGE( "_______________________________________");
-   MESSAGE( "xmin : " << xmin << " xmax : " << xmax );
-   MESSAGE( "ymin : " << ymin << " ymax : " << ymax );
-   MESSAGE( "zmin : " << zmin << " zmax : " << zmax );
-   MESSAGE( "_______________________________________" );
-   double epsilon = 1.e-6 ;
-   LesExtremes.push_back(xmin);
-   LesExtremes.push_back(xmax);
-   LesExtremes.push_back(0);
-   LesExtremes.push_back(ymin);
-   LesExtremes.push_back(ymax);
-   LesExtremes.push_back(0);
-   LesExtremes.push_back(zmin);
-   LesExtremes.push_back(zmax);
-   LesExtremes.push_back(0);
+    MESSAGE( "_______________________________________");
+    MESSAGE( "xmin : " << xmin << " xmax : " << xmax );
+    MESSAGE( "ymin : " << ymin << " ymax : " << ymax );
+    MESSAGE( "zmin : " << zmin << " zmax : " << zmax );
+    MESSAGE( "_______________________________________" );
+    double epsilon = 1.e-6 ;
+    LesExtremes.push_back(xmin);
+    LesExtremes.push_back(xmax);
+    LesExtremes.push_back(0);
+    LesExtremes.push_back(ymin);
+    LesExtremes.push_back(ymax);
+    LesExtremes.push_back(0);
+    LesExtremes.push_back(zmin);
+    LesExtremes.push_back(zmax);
+    LesExtremes.push_back(0);
 
 
    double max1=std::max ( LesExtremes[1] - LesExtremes[0] , LesExtremes[4] - LesExtremes[3] ) ;
@@ -298,42 +305,30 @@ std::vector<double> GetBoundingBoxInMedFile(const char * aFile)
 // On fait un traitement pour dans le cas d'une coordonnee constante
 // inhiber ce cas en mettant un increment negatif
 //
-   double diff = LesExtremes[1] - LesExtremes[0];
-   if (fabs(diff)  > epsilon*max2)
-   {
-      LesExtremes[2] = diff/100.;
-   }
-   else
-   {
-      LesExtremes[2] = -1. ;
-   }
+    double diff = LesExtremes[1] - LesExtremes[0];
+    if ( fabs(diff) > epsilon*max2 ) { LesExtremes[2] = diff/100.; }
+    else                             { LesExtremes[2] = -1. ; }
 
-   diff = LesExtremes[4] - LesExtremes[3];
-   if (fabs(diff)  > epsilon*max2)
-   {
-      LesExtremes[5]=diff/100.;
-   }
-   else
-   {
-      LesExtremes[5] = -1. ;
-   }
+    diff = LesExtremes[4] - LesExtremes[3];
+    if ( fabs(diff) > epsilon*max2 ) { LesExtremes[5]=diff/100.; }
+    else                             { LesExtremes[5] = -1. ; }
 
-   diff = LesExtremes[7] - LesExtremes[6];
-   if (fabs(diff)  > epsilon*max2)
-   {
-      LesExtremes[8]=diff/100.;
-   }
-   else
-   {
-      LesExtremes[8] = -1. ;
-   }
+    diff = LesExtremes[7] - LesExtremes[6];
+    if ( fabs(diff) > epsilon*max2 ) { LesExtremes[8]=diff/100.; }
+    else                             { LesExtremes[8] = -1. ;  }
 
-   MESSAGE ( "_______________________________________" );
-   MESSAGE ( "xmin : " << LesExtremes[0] << " xmax : " << LesExtremes[1] << " xincr : " << LesExtremes[2] );
-   MESSAGE ( "ymin : " << LesExtremes[3] << " ymax : " << LesExtremes[4] << " yincr : " << LesExtremes[5] );
-   MESSAGE ( "zmin : " << LesExtremes[6] << " zmax : " << LesExtremes[7] << " zincr : " << LesExtremes[8] );
-   MESSAGE ( "dmax : " << LesExtremes[9] );
-   MESSAGE ( "_______________________________________" );
+    MESSAGE ( "_______________________________________" );
+    MESSAGE ( "xmin : " << LesExtremes[0] << " xmax : " << LesExtremes[1] << " xincr : " << LesExtremes[2] );
+    MESSAGE ( "ymin : " << LesExtremes[3] << " ymax : " << LesExtremes[4] << " yincr : " << LesExtremes[5] );
+    MESSAGE ( "zmin : " << LesExtremes[6] << " zmax : " << LesExtremes[7] << " zincr : " << LesExtremes[8] );
+    MESSAGE ( "dmax : " << LesExtremes[9] );
+    MESSAGE ( "_______________________________________" );
+
+    free(coo) ;
+    break ;
+  }
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
 
    return  LesExtremes;
 }
index e6bac47dd8d75266e1be0c38982702d87835106a..22b89bc72b4c1d88e64a2f4d90c2b557c9bd069c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #ifndef HOMARDMEDCOMMUN_H
 #define HOMARDMEDCOMMUN_H
 
+#include "HOMARD_i.hxx"
 #include <vector>
 #include <set>
 #include <string>
 
-std::vector<double>    GetBoundingBoxInMedFile( const char * aFile);
-std::set<std::string>  GetListeGroupesInMedFile(const char * aFile);
+HOMARDENGINE_EXPORT int                    MEDFileExist( const char * aFile );
+HOMARDENGINE_EXPORT std::vector<double>    GetBoundingBoxInMedFile( const char * aFile);
+HOMARDENGINE_EXPORT std::set<std::string>  GetListeGroupesInMedFile(const char * aFile);
 
 #endif // HOMARD%MEDCOMMUN_H
diff --git a/src/HOMARD_I/Makefile.am b/src/HOMARD_I/Makefile.am
deleted file mode 100644 (file)
index c71252b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : Paul RASCLE, EDF
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : HOMARD
-#  $Header$
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-# header files 
-salomeinclude_HEADERS =         \
-       HOMARD_Cas_i.hxx        \
-       HOMARD_Hypothesis_i.hxx \
-       HOMARD_Iteration_i.hxx  \
-       HOMARD_Zone_i.hxx       \
-       HOMARD_Gen_i.hxx        \
-       HOMARD_Boundary_i.hxx   \
-        HomardMedCommun.h
-
-# Libraries targets
-
-lib_LTLIBRARIES = libHOMARDEngine.la
-
-dist_libHOMARDEngine_la_SOURCES = \
-       HOMARD_Cas_i.cxx          \
-       HOMARD_Hypothesis_i.cxx   \
-       HOMARD_Iteration_i.cxx    \
-       HOMARD_Gen_i.cxx          \
-       HOMARD_Zone_i.cxx         \
-       HOMARD_Boundary_i.cxx     \
-        HomardMedCommun.cxx
-
-
-
-# additionnal information to compil and link file
-libHOMARDEngine_la_CPPFLAGS =                \
-       $(CORBA_CXXFLAGS)                     \
-       $(CORBA_INCLUDES)                     \
-       $(KERNEL_CXXFLAGS)                    \
-       $(MED3_INCLUDES)                      \
-       $(SMESH_CXXFLAGS)                     \
-       $(GEOM_CXXFLAGS)                      \
-       -I$(srcdir)/../HOMARD                 \
-       -I$(srcdir)/../HOMARDGUI              \
-       -I$(top_builddir)/idl                 \
-        -I$(GEOM_ROOT_DIR)/include/salome     \
-        -I$(SMESH_ROOT_DIR)/include/salome     \
-        -I$(MED_ROOT_DIR)/include/salome      \
-       -I$(top_builddir)/adm_local/unix
-
-
-libHOMARDEngine_la_LDFLAGS  =            \
-       ../../idl/libSalomeIDLHOMARD.la  \
-       ../HOMARD/libHOMARDImpl.la       \
-       $(KERNEL_LDFLAGS)                \
-       $(MED3_LIBS)                     \
-       -lSalomeContainer                \
-       -lSalomeNS                       \
-       -lRegistry                       \
-       -lSalomeHDFPersist               \
-       -lSalomeLifeCycleCORBA           \
-       -lTOOLSDS                        \
-       -lSalomeGenericObj               \
-        $(SMESH_LDFLAGS)                 \
-       -lSalomeIDLSMESH                 \
-        -lSMESHClient
diff --git a/src/HOMARD_SCRIPTS/Makefile.am b/src/HOMARD_SCRIPTS/Makefile.am
deleted file mode 100644 (file)
index d8e9f31..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : HOMARD
-
-
-# Libraries targets
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-# ===============================================================
-# Files to be installed
-# ===============================================================
-#
-
-# Scripts to be installed.
-dist_salomescript_DATA = test_homard.py
diff --git a/src/HOMARD_SCRIPTS/testHomard.py b/src/HOMARD_SCRIPTS/testHomard.py
deleted file mode 100644 (file)
index 9b1125e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : HOMARD
-
-import salome
-homard=salome.lcc.FindOrLoadComponent("FactoryServer","HOMARD")
-import os
-home=os.environ["HOME"]
-etape0= home+"essai/etape0"
-archive=+"/archives"
-FichierConfiguration=etape0+"HOMARD.Configuration.0.vers.1"
-monCas=homard.CreateCas("MonCas",etape0)
-print monCas
-monCas.AjoutIter(1,FichierConfiguration)
-print "ici"
-monCas.CalculIter(1)
-print "la"
diff --git a/src/HOMARD_SCRIPTS/test_homard.py b/src/HOMARD_SCRIPTS/test_homard.py
deleted file mode 100644 (file)
index 0501189..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : HOMARD
-
-import salome
-salome.salome_init()
-
-import HOMARD
-
-#
-# initialize engine
-#
-homard = salome.lcc.FindOrLoadComponent("FactoryServer", "HOMARD")
-
-def test_save(fname):
-    #
-    # create new study
-    #
-    study = salome.myStudyManager.NewStudy("HOMARD")
-    homard.SetCurrentStudy(study)
-    #
-    # create case
-    #
-    case_1 = homard.CreateCas("Case 1")
-    case_1.SetNomDir("/tmp/homard")
-    case_1.SetTypeConf(12)
-    case_1.SetBoiteEnglobante([1.2,2.3,3.4,4.5,5.6,6.7,7.8,8.9,9.10,10.11])
-    #
-    # create hypothesis 1
-    #
-    hypo_1 = homard.CreateHypothese("Hypothesis 1")
-    hypo_1.SetTypeAdapRaffDera(2,3,4)
-    hypo_1.SetField("Field 1", 12, 3.45, 67, 23.343)
-    hypo_1.AjoutComposant("Comp 1")
-    hypo_1.AjoutComposant("Comp 2")
-    hypo_1.AjoutComposant("Comp 3")
-    #
-    # create hypothesis 2
-    #
-    hypo_2 = homard.CreateHypothese("Hypothesis 2")
-    hypo_2.SetTypeAdapRaffDera(20,30,40)
-    hypo_2.SetField("Field 2", 5, 12.67223, 900, 6.5434)
-    hypo_2.AjoutComposant("Comp 123")
-    #
-    # create iteration 1
-    #
-    iter_1 = homard.CreateIteration("Iteration 1")
-    iter_1.SetEtat(True)
-    iter_1.SetNumIter(56)
-    iter_1.SetMeshFile("/aaaa/bbbb/AAAAA.med")
-    iter_1.SetNomMesh("My Mesh")
-    iter_1.SetField("Field 1", 42, 522)
-    #
-    # create iteration 2
-    #
-    iter_2 = homard.CreateIteration("Iteration 2")
-    iter_2.SetEtat(False)
-    iter_2.SetNumIter(57)
-    iter_2.SetMeshFile("/cccc/cccc/asd.med")
-    iter_2.SetNomMesh("MeshXZY")
-    iter_2.SetField("Field 2", 22222, 50000)
-    #
-    # create iteration 3 (not published)
-    #
-    iter_3 = homard.CreateIteration("Iteration 3")
-    iter_3.SetEtat(True)
-    iter_3.SetNumIter(666)
-    iter_3.SetMeshFile("/not/assigned/iteration/file.med")
-    iter_3.SetNomMesh("NOT ASSIGNED")
-    iter_3.SetField("Field XXX", 999, -1)
-    #
-    # create zone 1
-    #
-    zone_1 = homard.CreateZone("Zone 1")
-    zone_1.SetBox(1.,2.,3.,4.,5.,6.)
-    zone_1.SetTypeZone(5454)
-    #
-    # create zone 2
-    #
-    zone_2 = homard.CreateZone("Zone 2")
-    zone_2.SetSphere(12.3, 3.4, .56, 6.5)
-    zone_2.SetTypeZone(6545)
-    #
-    # associate objects
-    #
-    homard.AssocieCasIteration("Case 1", "Iteration 1")
-    homard.AssocieCasIteration("Case 1", "Iteration 2")
-    homard.AssocieHypoIteration("Iteration 1", "Hypothesis 1")
-    homard.AssocieHypoZone("Zone 1", "Hypothesis 1")
-    homard.AssocieHypoIteration("Iteration 2", "Hypothesis 2")
-    homard.AssocieHypoZone("Zone 2", "Hypothesis 2")
-    homard.AssocieIterationIteration("Iteration 1", "Iteration 2")
-    #
-    # save study
-    #
-    salome.myStudyManager.SaveAs(fname, study, 0)
-    #
-    # close study
-    #
-    salome.myStudyManager.Close(study)
-    #
-    pass
-
-def test_load(fname):
-    #
-    # load study and 
-    #
-    study = salome.myStudyManager.Open(fname)
-    #
-    # load homard data
-    #
-    comp = study.FindComponent("HOMARD")
-    builder = study.NewBuilder()
-    builder.LoadWith(comp, homard)
-    #
-    # dump study id
-    #
-    print homard.GetCurrentStudy()._get_StudyId()
-    #
-    # dump case 1
-    #
-    case_1 = homard.GetCas("Case 1")
-    print "Case: ",          case_1.GetNomCas()
-    print "-> nom dir:",     case_1.GetNomDir()
-    print "-> type conf:",   case_1.GetTypeConf()
-    print "-> boite:",       case_1.GetBoiteEnglobante()
-    print "---"
-    #
-    # dump hypothesis 1
-    #
-    hypo_1 = homard.GetHypothesis("Hypothesis 1")
-    print "Hypothesis: ",    hypo_1.GetNomHypothesis()
-    print "-> type:",        hypo_1.GetTypeAdapRaffDera()
-    print "-> field name:",  hypo_1.GetFieldName()
-    print "-> composants:",  hypo_1.GetComposants()
-    print "-> zones:",       hypo_1.GetZones()
-    print "---"
-    #
-    # dump hypothesis 2
-    #
-    hypo_2 = homard.GetHypothesis("Hypothesis 2")
-    print "Hypothesis: ",    hypo_2.GetNomHypothesis()
-    print "-> type:",        hypo_2.GetTypeAdapRaffDera()
-    print "-> field name:",  hypo_2.GetFieldName()
-    print "-> composants:",  hypo_2.GetComposants()
-    print "-> zones:",       hypo_2.GetZones()
-    print "---"
-    #
-    # dump zone 1
-    #
-    zone_1 = homard.GetZone("Zone 1")
-    print "Zone: ",          zone_1.GetNomZone()
-    print "-> type zone:",   zone_1.GetTypeZone()
-    print "-> shere:",       zone_1.GetSphere()
-    print "-> box:",         zone_1.GetBox()
-    print "-> hypotheses:",  zone_1.GetHypo()
-    print "---"
-    #
-    # dump zone 1
-    #
-    zone_2 = homard.GetZone("Zone 2")
-    print "Zone: ",          zone_2.GetNomZone()
-    print "-> type zone:",   zone_2.GetTypeZone()
-    print "-> shere:",       zone_2.GetSphere()
-    print "-> box:",         zone_2.GetBox()
-    print "-> hypotheses:",  zone_2.GetHypo()
-    print "---"
-    #
-    # dump iteration 1
-    #
-    iter_1 = homard.GetIteration("Iteration 1")
-    print "Iteration: ",     iter_1.GetNomIter()
-    print "-> etat:",        iter_1.GetEtat()
-    print "-> num iter:",    iter_1.GetNumIter()
-    print "-> nom mesh:",    iter_1.GetNomMesh()
-    print "-> mesh file:",   iter_1.GetMeshFile()
-    print "-> field:",       iter_1.GetFieldFileName()
-    print "-> time step:",   iter_1.GetTimeStep()
-    print "-> rank:",        iter_1.GetRank()
-    print "-> parent iter:", iter_1.GetIterParent()
-    print "-> hypothesis:",  iter_1.GetNomHypo()
-    print "-> case:",        iter_1.GetNomCas()
-    print "---"
-    #
-    # dump iteration 2
-    #
-    iter_2 = homard.GetIteration("Iteration 2")
-    print "Iteration: ",     iter_2.GetNomIter()
-    print "-> etat:",        iter_2.GetEtat()
-    print "-> num iter:",    iter_2.GetNumIter()
-    print "-> nom mesh:",    iter_2.GetNomMesh()
-    print "-> mesh file:",   iter_2.GetMeshFile()
-    print "-> field:",       iter_2.GetFieldFileName()
-    print "-> time step:",   iter_2.GetTimeStep()
-    print "-> rank:",        iter_2.GetRank()
-    print "-> parent iter:", iter_2.GetIterParent()
-    print "-> hypothesis:",  iter_2.GetNomHypo()
-    print "-> case:",        iter_2.GetNomCas()
-    print "---"
-    #
-    # dump iteration 3
-    #
-    iter_3 = homard.GetIteration("Iteration 3")
-    print "Iteration: ",     iter_3.GetNomIter()
-    print "-> etat:",        iter_3.GetEtat()
-    print "-> num iter:",    iter_3.GetNumIter()
-    print "-> nom mesh:",    iter_3.GetNomMesh()
-    print "-> mesh file:",   iter_3.GetMeshFile()
-    print "-> field:",       iter_3.GetFieldFileName()
-    print "-> time step:",   iter_3.GetTimeStep()
-    print "-> rank:",        iter_3.GetRank()
-    print "-> parent iter:", iter_3.GetIterParent()
-    print "-> hypothesis:",  iter_3.GetNomHypo()
-    print "-> case:",        iter_3.GetNomCas()
-    print "---"
-
-# test file name
-filename = "/tmp/save_homard.hdf"
-
-# run tests
-test_save(filename)
-test_load(filename)
diff --git a/src/HOMARD_SWIG/CMakeLists.txt b/src/HOMARD_SWIG/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f9083e5
--- /dev/null
@@ -0,0 +1,28 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# --- scripts ---
+
+# scripts / static
+SET(_swig_SCRIPTS
+  HOMARD_shared_modules.py
+)
+
+# --- rules ---
+SALOME_INSTALL_SCRIPTS("${_swig_SCRIPTS}" ${SALOME_INSTALL_PYTHON_SHARED})
\ No newline at end of file
index 3c137dafef20fa1521a9f87df892e4814463e002..dab7822c38466457105d09053e998a8c895f37d6 100644 (file)
@@ -1,9 +1,9 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/src/HOMARD_SWIG/Makefile.am b/src/HOMARD_SWIG/Makefile.am
deleted file mode 100644 (file)
index 1ae4a82..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : HOMARD
-
-
-# Libraries targets
-#
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-# ===============================================================
-# Files to be installed
-# ===============================================================
-#
-
-# Scripts to be installed.
-dist_salomescript_DATA =               
-
-sharedpkgpython_PYTHON =               \
-       HOMARD_shared_modules.py
index 94110abb253b5aa4c0d2f775aabd05e00527572b..61916e57d4a3a2516f6521cb7c7ae74972ba6958 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2011-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2011-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100755 (executable)
index 7ea558e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#  File   : Makefile.in
-#  Author : (CEA)
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#
-SUBDIRS = HOMARD  HOMARD_I HOMARDGUI  HOMARD_SWIG
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..db3acf0
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (C) 2012-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+IF(SALOME_BUILD_TESTS)
+  ADD_SUBDIRECTORY(Test)
+ENDIF(SALOME_BUILD_TESTS)
+
+FILE(GLOB sample_files
+  ${PROJECT_SOURCE_DIR}/src/tests/samples/*.med
+  ${PROJECT_SOURCE_DIR}/src/tests/samples/*.bilan
+  ${PROJECT_SOURCE_DIR}/src/tests/samples/*.odt
+  ${PROJECT_SOURCE_DIR}/src/tests/samples/*.pdf
+  ${PROJECT_SOURCE_DIR}/src/tests/samples/*.png)
+INSTALL(FILES ${sample_files} DESTINATION ${SALOME_HOMARD_INSTALL_SAMPLES})
diff --git a/src/tests/Test/CMakeLists.txt b/src/tests/Test/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..9326644
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# For salome test
+SET(HOMARD_TEST_FILES
+  test_1.py
+  test_2.py
+  test_3.py
+  test_4.py
+  test_5.py
+  tutorial_1.py
+  tutorial_2.py
+  tutorial_3.py
+  tutorial_4.py
+  tutorial_5.py
+  test_util.py
+)
+
+INSTALL(FILES ${HOMARD_TEST_FILES}
+        DESTINATION ${SALOME_HOMARD_INSTALL_TEST})
+
+INSTALL(FILES CTestTestfileInstall.cmake
+        DESTINATION ${SALOME_HOMARD_INSTALL_TEST}
+        RENAME CTestTestfile.cmake)
\ No newline at end of file
diff --git a/src/tests/Test/CTestTestfileInstall.cmake b/src/tests/Test/CTestTestfileInstall.cmake
new file mode 100644 (file)
index 0000000..f9df746
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SET(SALOME_TEST_DRIVER "$ENV{KERNEL_ROOT_DIR}/bin/salome/appliskel/salome_test_driver.py")
+
+SET(COMPONENT_NAME HOMARD)
+SET(TIMEOUT        500)
+
+SET(HOMARD_TEST_FILES
+test_1
+test_2
+test_3
+test_4
+test_5
+tutorial_1
+tutorial_2
+tutorial_3
+tutorial_4
+tutorial_5
+)
+
+FOREACH(tfile ${HOMARD_TEST_FILES})
+  SET(TEST_NAME HOMARD_${tfile})
+  ADD_TEST(${TEST_NAME} python ${SALOME_TEST_DRIVER} ${TIMEOUT} ${tfile}.py)
+  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}")
+ENDFOREACH()
diff --git a/src/tests/Test/test_1.py b/src/tests/Test/test_1.py
new file mode 100755 (executable)
index 0000000..2bb3ca2
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test test_1
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "test_1"
+DEBUG = False
+N_ITER_TEST_FILE = 3
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  error = 0
+#
+  while not error :
+  #
+    HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation of the zones
+  # =====================
+  # Creation of the box zone_1_1
+    zone_1_1 = HOMARD.CreateZoneBox('Zone_1_1', -0.01, 1.01, -0.01, 0.4, -0.01, 0.6)
+
+  # Creation of the sphere zone_1_2
+    zone_1_2 = HOMARD.CreateZoneSphere('Zone_1_2', 0.5, 0.6, 0.7, 0.75)
+  #
+  # Creation of the hypotheses
+  # ==========================
+    dico = {}
+    dico["1"] = "raffinement"
+    dico["-1"] = "deraffinement"
+  # Creation of the hypothesis a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM
+    hyponame_1 = "a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM"
+    print "-------- Creation of the hypothesis", hyponame_1
+    hypo_1_1 = HOMARD.CreateHypothesis(hyponame_1)
+    hypo_1_1.SetField('RESU____ERRE_ELEM_SIGM__________')
+    hypo_1_1.SetUseComp(0)
+    hypo_1_1.AddComp('ERREST')
+    hypo_1_1.SetRefinThr(3, 10.1)
+    hypo_1_1.AddFieldInterp('RESU____DEPL____________________')
+    hypo_1_1.AddFieldInterp('RESU____ERRE_ELEM_SIGM__________')
+    print hyponame_1, " : champ utilisé :", hypo_1_1.GetFieldName()
+    print hyponame_1, " : composantes utilisées :", hypo_1_1.GetComps()
+    if ( len (hypo_1_1.GetFieldName()) > 0 ) :
+      print ".. caractéristiques de l'adaptation :", hypo_1_1.GetField()
+    print hyponame_1, " : champs interpolés :", hypo_1_1.GetFieldInterps()
+  # Creation of the hypothesis Zones_1_et_2
+    hyponame_2 = "Zones_1_et_2"
+    print "-------- Creation of the hypothesis", hyponame_2
+    zones_1_et_2 = HOMARD.CreateHypothesis(hyponame_2)
+    zones_1_et_2.AddZone('Zone_1_1', 1)
+    zones_1_et_2.AddZone('Zone_1_2', 1)
+    laux = zones_1_et_2.GetZones()
+    nbzone = len(laux)/2
+    jaux = 0
+    for iaux in range(nbzone) :
+      print hyponame_2, " : ", dico[laux[jaux+1]], "sur la zone", laux[jaux]
+      jaux += 2
+    print hyponame_2, " : champ utilisé :", zones_1_et_2.GetFieldName()
+    if ( len (zones_1_et_2.GetFieldName()) > 0 ) :
+      print ".. caractéristiques de l'adaptation :", zones_1_et_2.GetField()
+    print hyponame_2, " : champs interpolés :", zones_1_et_2.GetFieldInterps()
+  #
+  # Creation of the cases
+  # =====================
+    # Creation of the case
+    print "-------- Creation of the case", TEST_NAME
+    mesh_file = os.path.join(REP_DATA, TEST_NAME + '.00.med')
+    case_test_1 = HOMARD.CreateCase(TEST_NAME, 'MAILL', mesh_file)
+    case_test_1.SetDirName(DIRCASE)
+  #
+  # Creation of the iterations
+  # ==========================
+  # Creation of the iteration 1
+    iter_name = "I_" + TEST_NAME + "_1"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_1_1 = case_test_1.NextIteration(iter_name)
+    iter_test_1_1.AssociateHypo(hyponame_1)
+    print ". Hypothese :", hyponame_1
+    iter_test_1_1.SetMeshName('M1')
+    iter_test_1_1.SetMeshFile(os.path.join(DIRCASE, 'maill.01.med'))
+    iter_test_1_1.SetFieldFile(os.path.join(REP_DATA, TEST_NAME + '.00.med'))
+    iter_test_1_1.SetTimeStepRank(1, 1)
+    iter_test_1_1.SetFieldInterpTimeStep('RESU____DEPL____________________', 1)
+    iter_test_1_1.SetFieldInterpTimeStepRank('RESU____ERRE_ELEM_SIGM__________', 1, 1)
+    print ". Instants d'interpolation :", iter_test_1_1.GetFieldInterpsTimeStepRank()
+    error = iter_test_1_1.Compute(1, 1)
+    if error :
+      error = 1
+      break
+
+  # Creation of the iteration 2
+    iter_name = "I_" + TEST_NAME + "_2"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_1_2 = iter_test_1_1.NextIteration(iter_name)
+    iter_test_1_2.AssociateHypo(hyponame_1)
+    print ". Hypothese :", hyponame_1
+    iter_test_1_2.SetMeshName('M2')
+    iter_test_1_2.SetMeshFile(os.path.join(DIRCASE, 'maill.02.med'))
+    iter_test_1_2.SetFieldFile(os.path.join(REP_DATA, TEST_NAME + '.01.med'))
+    iter_test_1_2.SetTimeStepRank(1, 1)
+    iter_test_1_2.SetFieldInterpTimeStep('RESU____DEPL____________________', 1)
+    iter_test_1_2.SetFieldInterpTimeStepRank('RESU____ERRE_ELEM_SIGM__________', 1, 1)
+    print ". Instants d'interpolation :", iter_test_1_2.GetFieldInterpsTimeStepRank()
+    error = iter_test_1_2.Compute(1, 1)
+    if error :
+      error = 2
+      break
+
+  # Creation of the iteration 3
+    iter_name = "I_" + TEST_NAME + "_3"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_1_3 = iter_test_1_2.NextIteration(iter_name)
+    iter_test_1_3.AssociateHypo(hyponame_2)
+    print ". Hypothese :", hyponame_2
+    iter_test_1_3.SetMeshName('M3')
+    iter_test_1_3.SetMeshFile(os.path.join(DIRCASE, 'maill.03.med'))
+    iter_test_1_2.SetFieldFile(os.path.join(REP_DATA, TEST_NAME + '.02.med'))
+    print ". Instants d'interpolation :", iter_test_1_3.GetFieldInterpsTimeStepRank()
+    error = iter_test_1_3.Compute(1, 1)
+    if error :
+      error = 3
+      break
+  #
+  # Creation of the schema YACS
+  # ===========================
+    scriptfile = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script_test.py")
+    scriptfile = os.path.normpath(scriptfile)
+    dirname = DIRCASE
+    yacs_test_1 = case_test_1.CreateYACSSchema("YACS_test_1", scriptfile, dirname, mesh_file)
+    error = yacs_test_1.Write()
+    if error :
+      error = 4
+      break
+  #
+    break
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load homard engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/test_2.py b/src/tests/Test/test_2.py
new file mode 100755 (executable)
index 0000000..fd92d1f
--- /dev/null
@@ -0,0 +1,192 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test test_2
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "test_2"
+DEBUG = False
+N_ITER_TEST_FILE = 3
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  error = 0
+#
+  while not error :
+  #
+    HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation of the boundaries
+  # ==========================
+  # Creation of the discrete boundary boundary_1
+    boundary_1 = HOMARD.CreateBoundaryDi('internal_boundary', 'plaque', os.path.join(REP_DATA, TEST_NAME + '.fr.med'))
+  #
+  # Creation of the hypotheses
+  # ==========================
+  # Creation of the hypothesis 1
+    hyponame_1 = "hypo_" + TEST_NAME + "_1"
+    print "-------- Creation of the hypothesis", hyponame_1
+    hypo_test_2_1 = HOMARD.CreateHypothesis(hyponame_1)
+    hypo_test_2_1.SetUnifRefinUnRef(1)
+    hypo_test_2_1.AddGroup('EG')
+    hypo_test_2_1.AddGroup('BANDE')
+    print hyponame_1, " : zones utilisées :", hypo_test_2_1.GetZones()
+    print hyponame_1, " : champ utilisé :", hypo_test_2_1.GetFieldName()
+    print hyponame_1, " : composantes utilisées :", hypo_test_2_1.GetComps()
+    if ( len (hypo_test_2_1.GetFieldName()) > 0 ) :
+      print ".. caractéristiques de l'adaptation :", hypo_test_2_1.GetField()
+
+  # Creation of the hypothesis 2
+    hyponame_2 = "hypo_" + TEST_NAME + "_2"
+    print "-------- Creation of the hypothesis", hyponame_2
+    hypo_test_2_2 = HOMARD.CreateHypothesis(hyponame_2)
+    hypo_test_2_2.SetUnifRefinUnRef(1)
+    hypo_test_2_2.AddGroup('M_D')
+    print hyponame_2, " : zones utilisées :", hypo_test_2_2.GetZones()
+    print hyponame_2, " : champ utilisé :", hypo_test_2_2.GetFieldName()
+    print hyponame_2, " : composantes utilisées :", hypo_test_2_2.GetComps()
+    if ( len (hypo_test_2_2.GetFieldName()) > 0 ) :
+      print ".. caractéristiques de l'adaptation :", hypo_test_2_2.GetField()
+  #
+  # Creation of the cases
+  # =====================
+    # Creation of the case
+    mesh_file = os.path.join(REP_DATA, TEST_NAME + '.00.med')
+    case_test_2 = HOMARD.CreateCase(TEST_NAME, 'PLAQUE_0', mesh_file)
+    case_test_2.SetDirName(DIRCASE)
+    case_test_2.AddBoundaryGroup('internal_boundary', '')
+  #
+  # Creation of the iterations
+  # ==========================
+  # Creation of the iteration 1
+    iter_name = "I_" + TEST_NAME + "_1"
+    iter_test_2_1 = case_test_2.NextIteration(iter_name)
+    iter_test_2_1.SetMeshName('PLAQUE_1')
+    iter_test_2_1.SetMeshFile(os.path.join(DIRCASE, 'maill.01.med'))
+    iter_test_2_1.AssociateHypo(hyponame_1)
+    error = iter_test_2_1.Compute(1, 1)
+    if error :
+      error = 1
+      break
+
+  # Creation of the iteration 2
+    iter_name = "I_" + TEST_NAME + "_2"
+    iter_test_2_2 = iter_test_2_1.NextIteration(iter_name)
+    iter_test_2_2.SetMeshName('PLAQUE_2')
+    iter_test_2_2.SetMeshFile(os.path.join(DIRCASE, 'maill.02.med'))
+    iter_test_2_2.AssociateHypo(hyponame_1)
+    error = iter_test_2_2.Compute(1, 1)
+    if error :
+      error = 2
+      break
+
+  # Creation of the iteration 3
+    iter_name = "I_" + TEST_NAME + "_3"
+    iter_test_2_3 = iter_test_2_2.NextIteration(iter_name)
+    iter_test_2_3.SetMeshName('PLAQUE_3')
+    iter_test_2_3.SetMeshFile(os.path.join(DIRCASE, 'maill.03.med'))
+    iter_test_2_3.AssociateHypo(hyponame_2)
+    error = iter_test_2_3.Compute(1, 1)
+    if error :
+      error = 3
+      break
+  #
+  # Creation of the schema YACS
+  # ===========================
+    scriptfile = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script_test.py")
+    scriptfile = os.path.normpath(scriptfile)
+    dirname = DIRCASE
+    yacs_test_2 = case_test_2.CreateYACSSchema("YACS_test_2", scriptfile, dirname, mesh_file)
+    yacs_test_2.SetMaxIter(4)
+    yacs_test_2.SetType(1)
+    filexml = os.path.join(DIRCASE, 'yacs_test_2.xml')
+    error = yacs_test_2.WriteOnFile(filexml)
+    if error :
+      error = 4
+      break
+  #
+    break
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load homard engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/test_3.py b/src/tests/Test/test_3.py
new file mode 100755 (executable)
index 0000000..ddaa7a1
--- /dev/null
@@ -0,0 +1,226 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test test_3
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "test_3"
+DEBUG = False
+N_BOUCLE = 2
+N_ITER_TEST_FILE = 2
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  error = 0
+#
+  while not error :
+  #
+    HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation of the boundaries
+  # ==========================
+  # Creation of the discrete boundary
+    boundary_3_1 = HOMARD.CreateBoundaryDi('courbes', 'COURBES', os.path.join(REP_DATA, TEST_NAME + '.fr.med'))
+  #
+  # Creation of the external cylinder
+    boundary_3_2 = HOMARD.CreateBoundaryCylinder('cyl_ext', 50.0, 25., -25., 1., 0., 0., 100.)
+  #
+  # Creation of the internal cylinder
+    boundary_3_3 = HOMARD.CreateBoundaryCylinder('cyl_int', 50.0, 25., -25., 1., 0., 0., 50.)
+  #
+  # Creation of the first sphere
+    boundary_3_4 = HOMARD.CreateBoundarySphere('sphere_1', 50.0, 25., -25., 100.)
+  #
+  # Creation of the second sphere
+    boundary_3_5 = HOMARD.CreateBoundarySphere('sphere_2', 450.0, 25., -25., 100.)
+  #
+  # Creation of the hypotheses
+  # ==========================
+  # Uniform refinement
+    hyponame = "hypo_" + TEST_NAME
+    print "-------- Creation of the hypothesis", hyponame
+    hypo_test_3 = HOMARD.CreateHypothesis(hyponame)
+    hypo_test_3.SetUnifRefinUnRef(1)
+    print hyponame, " : zones utilisées :", hypo_test_3.GetZones()
+    print hyponame, " : champ utilisé :", hypo_test_3.GetFieldName()
+    print hyponame, " : composantes utilisées :", hypo_test_3.GetComps()
+  #
+    for num in range (N_BOUCLE+1) :
+  #
+      print "-------- num =", num, "--------"
+  #
+  # Creation of the case case_test_3
+  # ===========================
+      if ( num <= 1 ) :
+        print "-------- Creation of the case", TEST_NAME
+        mesh_file = os.path.join(REP_DATA, TEST_NAME + '.00.med')
+        case_test_3 = HOMARD.CreateCase(TEST_NAME, 'MOYEU', mesh_file)
+        case_test_3.SetDirName(DIRCASE)
+        case_test_3.AddBoundaryGroup('courbes', '')
+        case_test_3.AddBoundaryGroup('cyl_ext', 'EXT')
+        case_test_3.AddBoundaryGroup('cyl_int', 'INT')
+        case_test_3.AddBoundaryGroup('sphere_1', 'END_1')
+        case_test_3.AddBoundaryGroup('sphere_2', 'END_2')
+  #
+  # Creation of the iterations
+  # ==========================
+  # Creation of the iteration 1
+      iter_name = "I_" + TEST_NAME + "_1"
+      print "-------- Creation of the iteration", iter_name
+      iter_test_3_1 = case_test_3.NextIteration(iter_name)
+      iter_test_3_1.SetMeshName('MOYEU_1')
+      iter_test_3_1.SetMeshFile(os.path.join(DIRCASE, 'maill.01.med'))
+      iter_test_3_1.AssociateHypo('hypo_test_3')
+      error = iter_test_3_1.Compute(1, 1)
+      if error :
+        error = 10*num + 1
+        break
+
+  # Creation of the iteration 2
+      iter_name = "I_" + TEST_NAME + "_2"
+      print "-------- Creation of the iteration", iter_name
+      iter_test_3_2 = iter_test_3_1.NextIteration(iter_name)
+      iter_test_3_2.SetMeshName('MOYEU_2')
+      iter_test_3_2.SetMeshFile(os.path.join(DIRCASE, 'maill.02.med'))
+      iter_test_3_2.AssociateHypo('hypo_test_3')
+      error = iter_test_3_2.Compute(1, 1)
+      if error :
+        error = 10*num + 2
+        break
+  #
+  # Creation of the schema YACS
+  # ===========================
+      scriptfile = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "en", "_downloads", "yacs_script_test.py")
+      scriptfile = os.path.normpath(scriptfile)
+      dirname = DIRCASE
+      yacsname = "YACS_" + TEST_NAME
+      print "-------- Creation of the schema", yacsname
+      yacs_test_3 = case_test_3.CreateYACSSchema(yacsname, scriptfile, dirname, mesh_file)
+      yacs_test_3.SetType(2)
+      yacs_test_3.SetMaxIter(2)
+      error = yacs_test_3.Write()
+      if error :
+        error = 10*num + 5
+        break
+
+  # Destructions
+  # ============
+  # Destruction of the schema, sauf a la fin
+      if ( num < N_BOUCLE ) :
+        print "-------- Destruction of the schema", yacs_test_3.GetName()
+        error = yacs_test_3.Delete(1)
+        if error :
+          error = 10*num + 6
+          break
+  # After the first loop, the case is deleted, except the final mesh files
+  # All the iterations are deleted
+      if ( num == 0 ) :
+        print "-------- Destruction of the case", case_test_3.GetName()
+        error = case_test_3.Delete(0)
+        if error :
+          break
+  # After the second loop, the iterations are deleted, with the final mesh files
+      elif ( num == 1 ) :
+  # Recursive destruction of the iterations
+        print "-------- Recursive destruction of the iteration", iter_test_3_1.GetName()
+        error = iter_test_3_1.Delete(1)
+        if error :
+          error = 10*num + 3
+          break
+  # Destruction and creation of the hypothese
+        if ( num == 1 ) :
+          print "-------- Destruction of the hypothese", hypo_test_3.GetName()
+          error = hypo_test_3.Delete()
+          if error :
+            error = 10*num + 4
+            break
+          hyponame = "hypo_test_3"
+          print "-------- Creation of the hypothesis", hyponame
+          hypo_test_3 = HOMARD.CreateHypothesis(hyponame)
+          hypo_test_3.SetUnifRefinUnRef(1)
+  #
+    break
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load homard engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE*N_BOUCLE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/test_4.py b/src/tests/Test/test_4.py
new file mode 100755 (executable)
index 0000000..e4facd3
--- /dev/null
@@ -0,0 +1,348 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test test_4
+"""
+__revision__ = "V2.2"
+
+#========================================================================
+TEST_NAME = "test_4"
+DEBUG = False
+N_ITER_TEST_FILE = 3
+DX = 600.
+DY = 400.
+DZ = 200.
+#========================================================================
+import os
+import tempfile
+import sys
+import numpy as np
+import salome
+import GEOM
+import SMESH
+import HOMARD
+import MEDCoupling as mc
+import MEDLoader as ml
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# ==================================
+
+salome.salome_init()
+
+import SALOMEDS
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+from salome.StdMeshers import StdMeshersBuilder
+#
+from MEDCouplingRemapper import MEDCouplingRemapper
+
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def geom_smesh_exec(theStudy):
+  """
+Python script for GEOM and SMESH
+  """
+  error = 0
+#
+  while not error :
+  #
+    geompy = geomBuilder.New(theStudy)
+  #
+  # Creation of the box
+  # ===================
+    box_g = geompy.MakeBoxDXDYDZ(DX, DY, DZ, "BOX")
+
+  # Creation of the mesh
+  # ====================
+    smesh = smeshBuilder.New(theStudy)
+    box_m = smesh.Mesh(box_g)
+    smesh.SetName(box_m.GetMesh(), 'MESH')
+  #
+  # Creation of the hypotheses
+  # ==========================
+    regular_1d = box_m.Segment()
+    smesh.SetName(regular_1d.GetAlgorithm(), 'Regular_1D')
+    length = min(DX, DY, DZ) / 5.
+    local_length = regular_1d.LocalLength(length, None, 1e-07)
+    smesh.SetName(local_length, 'Local Length')
+  #
+    quadrangle_2d = box_m.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+    smesh.SetName(quadrangle_2d.GetAlgorithm(), 'Quadrangle_2D')
+    quadrangle_parameters = quadrangle_2d.QuadrangleParameters(StdMeshersBuilder.QUAD_STANDARD, -1, [], [])
+    smesh.SetName(quadrangle_parameters, 'Quadrangle Parameters')
+  #
+    hexa_3d = box_m.Hexahedron(algo=smeshBuilder.Hexa)
+    smesh.SetName(hexa_3d.GetAlgorithm(), 'Hexa_3D')
+  #
+  # Computation
+  # ===========
+  #
+    isDone = box_m.Compute()
+    if not isDone :
+      error = 1
+      break
+  #
+  # MED exportation
+  # ===============
+  #
+    try:
+      ficmed = os.path.join(DIRCASE, 'maill.00.med')
+      box_m.ExportMED( ficmed, 0, SMESH.MED_V2_2, 1, None, 1)
+    except Exception, eee:
+      error = 2
+      raise Exception('ExportToMEDX() failed. '+eee.message)
+  #
+    break
+  #
+  return error
+
+#========================================================================
+#
+#========================================================================
+def field_exec(theStudy, niter):
+  """
+Python script for MEDCoupling
+  """
+  error = 0
+#
+  while not error :
+  #
+  # The mesh
+  # ========
+    ficmed = os.path.join(DIRCASE, 'maill.%02d.med' % niter)
+    meshMEDFileRead = ml.MEDFileMesh.New(ficmed)
+    meshRead0 = meshMEDFileRead.getMeshAtLevel(0)
+  # Valeurs of the field
+  # ====================
+    nbNodes = meshRead0.getNumberOfNodes()
+    valeur = mc.DataArrayDouble(nbNodes)
+    for iaux, taux in enumerate(meshRead0.getCoords()) :
+      #ligne   = "x = %f" % taux[0]
+      #ligne  += ", y = %f" % taux[1]
+      #ligne  += ", z = %f" % taux[2]
+      #print ligne
+      #distance = (taux[0]-DX*0.2)**2 + (taux[1]-DY*0.2)**2 + (taux[2]-DZ*0.4)**2
+      distance = min(abs(taux[0]-DX*0.4), abs(taux[1]-DY*0.2), abs(taux[2]-DZ*0.4))
+      valeur[iaux] = 1.e0 / max ( 1.e-5, np.sqrt(distance) )
+    #print ". valeur", valeur
+    nparr = valeur.toNumPyArray()
+    print ". mini/maxi", nparr.min(), nparr.max()
+  #
+  # Creation of the field
+  # =====================
+    field = ml.MEDCouplingFieldDouble(ml.ON_NODES, ml.ONE_TIME)
+    field.setArray(valeur)
+    field.setMesh(meshRead0)
+    field.setName("DISTANCE")
+  #
+    fMEDFile_ch = ml.MEDFileField1TS()
+    fMEDFile_ch.setFieldNoProfileSBT(field)     # No profile desired on the field, Sort By Type
+    fMEDFile_ch.write(ficmed, 0) # 0 to indicate that we *append* (and no overwrite) to the MED file
+  #
+    break
+  #
+  return error
+
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  error = 0
+#
+  while not error :
+  #
+    HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation of the zones
+  # =====================
+  #
+    epsilon = min(DX, DY, DZ) / 100.
+  # Creation of the box zone_4_1
+    zone_4_1 = HOMARD.CreateZoneBox('Zone_4_1', -epsilon, DX/3.+epsilon, DY/4.-epsilon, 3.*DY/4.+epsilon, 4.*DZ/5.-epsilon, DZ+epsilon)
+
+  # Creation of the sphere zone_4_2
+    rayon = min(DX, DY, DZ) / 4.
+    zone_4_2 = HOMARD.CreateZoneSphere('Zone_4_2', DX/3., DY*0.3, DZ*0.6, rayon)
+  #
+  # Creation of the hypotheses
+  # ==========================
+    dico = {}
+    dico["1"] = "raffinement"
+    dico["-1"] = "deraffinement"
+  # Creation of the hypothesis hypo_4_1
+    hyponame_1 = "Zone_1"
+    print "-------- Creation of the hypothesis", hyponame_1
+    hypo_4_1 = HOMARD.CreateHypothesis(hyponame_1)
+    hypo_4_1.AddZone('Zone_4_1', 1)
+    hypo_4_1.SetExtraOutput(2)
+    laux = hypo_4_1.GetZones()
+    nbzone = len(laux)/2
+    jaux = 0
+    for iaux in range(nbzone) :
+      print hyponame_1, " : ", dico[laux[jaux+1]], "sur la zone", laux[jaux]
+      jaux += 2
+  # Creation of the hypothesis hypo_4_2
+    hyponame_2 = "Zone_2"
+    print "-------- Creation of the hypothesis", hyponame_2
+    hypo_4_2 = HOMARD.CreateHypothesis(hyponame_2)
+    hypo_4_2.AddZone('Zone_4_2', 1)
+    hypo_4_2.SetExtraOutput(2)
+    laux = hypo_4_2.GetZones()
+    nbzone = len(laux)/2
+    jaux = 0
+    for iaux in range(nbzone) :
+      print hyponame_2, " : ", dico[laux[jaux+1]], "sur la zone", laux[jaux]
+      jaux += 2
+  # Creation of the hypothesis DISTANCE INVERSE
+    hyponame_3 = "DISTANCE INVERSE"
+    print "-------- Creation of the hypothesis", hyponame_3
+    hypo_4_3 = HOMARD.CreateHypothesis(hyponame_3)
+    hypo_4_3.SetField('DISTANCE')
+    hypo_4_3.SetUseComp(0)
+    hypo_4_3.SetRefinThr(1, 0.3)
+    hypo_4_3.SetUnRefThr(1, 0.2)
+    hypo_4_3.AddFieldInterp('DISTANCE')
+    hypo_4_3.SetExtraOutput(2)
+    print hyponame_3, " : zones utilisées :", hypo_4_3.GetZones()
+    print hyponame_3, " : champ utilisé :", hypo_4_3.GetFieldName()
+    print hyponame_3, " : composantes utilisées :", hypo_4_3.GetComps()
+    if ( len (hypo_4_3.GetFieldName()) > 0 ) :
+      print ".. caractéristiques de l'adaptation :", hypo_4_3.GetField()
+    print hyponame_3, " : champs interpolés :", hypo_4_3.GetFieldInterps()
+  #
+  # Creation of the cases
+  # =====================
+    # Creation of the case
+    print "-------- Creation of the case", TEST_NAME
+    mesh_file = os.path.join(DIRCASE, 'maill.00.med')
+    case_test_4 = HOMARD.CreateCase(TEST_NAME, 'MESH', mesh_file)
+    case_test_4.SetDirName(DIRCASE)
+  #
+  # Creation of the iterations
+  # ==========================
+  # Creation of the iteration 1
+    iter_name = "I_" + TEST_NAME + "_1"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_4_1 = case_test_4.NextIteration(iter_name)
+    iter_test_4_1.AssociateHypo(hyponame_1)
+    print ". Hypothese :", hyponame_1
+    iter_test_4_1.SetMeshName('M1')
+    iter_test_4_1.SetMeshFile(os.path.join(DIRCASE, 'maill.01.med'))
+    error = iter_test_4_1.Compute(1, 2)
+    if error :
+      error = 1
+      break
+
+  # Creation of the iteration 2
+    iter_name = "I_" + TEST_NAME + "_2"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_4_2 = iter_test_4_1.NextIteration(iter_name)
+    iter_test_4_2.AssociateHypo(hyponame_2)
+    print ". Hypothese :", hyponame_2
+    iter_test_4_2.SetMeshName('M2')
+    iter_test_4_2.SetMeshFile(os.path.join(DIRCASE, 'maill.02.med'))
+    error = iter_test_4_2.Compute(1, 2)
+    if error :
+      error = 2
+      break
+
+  # Creation of the iteration 3
+  #
+    error = field_exec(theStudy, 2)
+    if error :
+      error = 30
+      break
+  #
+    iter_name = "I_" + TEST_NAME + "_3"
+    print "-------- Creation of the iteration", iter_name
+    iter_test_4_3 = iter_test_4_2.NextIteration(iter_name)
+    iter_test_4_3.AssociateHypo(hyponame_3)
+    print ". Hypothese :", hyponame_3
+    iter_test_4_3.SetMeshName('M3')
+    iter_test_4_3.SetFieldFile(os.path.join(DIRCASE, 'maill.02.med'))
+    iter_test_4_3.SetMeshFile(os.path.join(DIRCASE, 'maill.03.med'))
+    error = iter_test_4_3.Compute(1, 2)
+    if error :
+      error = 3
+      break
+  #
+    break
+  #
+  return error
+
+#========================================================================
+#
+# Geometry and Mesh
+#
+try :
+  ERROR = geom_smesh_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in geom_smesh_exec')
+except Exception, eee:
+  raise Exception('Pb in geom_smesh_exec: '+eee.message)
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load homard engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/test_5.py b/src/tests/Test/test_5.py
new file mode 100755 (executable)
index 0000000..07aa93f
--- /dev/null
@@ -0,0 +1,336 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Specific conditions for Code_Saturne
+Test test_5
+"""
+__revision__ = "V1.0"
+
+#========================================================================
+TEST_NAME = "test_5"
+DEBUG = False
+VERBOSE = True
+N_ITER_TEST_FILE = 3
+NBCELL_X = 10
+NBCELL_Y = 10
+NBCELL_Z = 10
+LG_X = 360.
+LG_Y = 240.
+LG_Z = 160.
+MESH_NAME = "MESH"
+#========================================================================
+import os
+import tempfile
+import sys
+import numpy as np
+import salome
+import HOMARD
+import MEDCoupling as mc
+import MEDLoader as ml
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# ==================================
+
+salome.salome_init()
+#
+from MEDCouplingRemapper import MEDCouplingRemapper
+
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def mesh_exec(theStudy):
+  """
+Python script for MED
+  """
+  error = 0
+#
+  while not error :
+  #
+  # Creation of the mesh
+  # ====================
+    maillage_3d = ml.MEDCouplingUMesh(MESH_NAME, 2)
+    maillage_3d.setMeshDimension(3)
+  #
+  # Creation of the nodes
+  # ====================
+  #
+    nbno_x = NBCELL_X + 1
+    nbno_y = NBCELL_Y + 1
+    nbno_z = NBCELL_Z + 1
+#
+    delta_x = LG_X / float(NBCELL_X)
+    delta_y = LG_Y / float(NBCELL_Y)
+    delta_z = LG_Z / float(NBCELL_Z)
+#
+    coordinates = list()
+    coo_z = -0.5*LG_Z
+    for kaux in range(nbno_z) :
+      coo_y = -0.5*LG_Y
+      for jaux in range(nbno_y) :
+        coo_x = -0.5*LG_X
+        for iaux in range(nbno_x) :
+          coordinates.append(coo_x)
+          coordinates.append(coo_y)
+          coordinates.append(coo_z)
+          coo_x += delta_x
+        coo_y += delta_y
+      coo_z += delta_z
+#
+    nbr_nodes = nbno_x*nbno_y*nbno_z
+    les_coords = ml.DataArrayDouble(coordinates, nbr_nodes, 3)
+    maillage_3d.setCoords(les_coords)
+  #
+  # Creation of the cells
+  # =====================
+  #
+    nbr_cell_3d = NBCELL_X*NBCELL_Y*NBCELL_Z
+    maillage_3d.allocateCells(nbr_cell_3d)
+#
+    decala_z = nbno_x*nbno_y
+#   kaux = numero de la tranche en z
+    for kaux in range(1, nbno_z) :
+#
+      #print ". Tranche en z numero %d" % kaux
+      decala = decala_z*(kaux-1)
+#     jaux = numero de la tranche en y
+      for jaux in range(1, nbno_y) :
+#
+        #print ". Tranche en y numero %d" % jaux
+#       iaux = numero de la tranche en x
+        for iaux in range(1, nbno_x) :
+#
+          #print ". Tranche en x numero %d" % iaux
+          nref = decala+iaux-1
+          laux = [nref, nref+nbno_x, nref+1+nbno_x, nref+1, nref+decala_z, nref+nbno_x+decala_z, nref+1+nbno_x+decala_z, nref+1+decala_z]
+          #if self.verbose_max :
+            #if ( ( iaux==1 and jaux==1 and kaux==1 ) or ( iaux==(nbr_nodes_x-1) and jaux==(nbr_nodes_y-1) and kaux==(nbr_nodes_z-1) ) ) :
+              #print ". Maille %d : " % (iaux*jaux*kaux), laux
+          maillage_3d.insertNextCell(ml.NORM_HEXA8, 8, laux)
+#
+        decala += nbno_x
+#
+    maillage_3d.finishInsertingCells()
+  #
+  # Agregation into a structure of MEDLoader
+  # ========================================
+  #
+    meshMEDFile3D = ml.MEDFileUMesh()
+    meshMEDFile3D.setName(MESH_NAME)
+#
+    meshMEDFile3D.setMeshAtLevel(0, maillage_3d)
+#
+    meshMEDFile3D.rearrangeFamilies()
+  #
+  # MED exportation
+  # ===============
+  #
+    try:
+      ficmed = os.path.join(DIRCASE, 'maill.00.med')
+      #print "Ecriture du maillage dans le fichier", ficmed
+      meshMEDFile3D.write(ficmed, 2)
+    except Exception, eee:
+      error = 2
+      raise Exception('ExportToMEDX() failed. '+eee.message)
+  #
+    break
+  #
+  return error
+
+#========================================================================
+#
+#========================================================================
+def field_exec(theStudy, niter):
+  """
+Python script for MEDCoupling
+  """
+  error = 0
+#
+  while not error :
+  #
+  # The mesh
+  # ========
+    ficmed = os.path.join(DIRCASE, 'maill.%02d.med' % niter)
+    meshMEDFileRead = ml.MEDFileMesh.New(ficmed)
+    mesh_read0 = meshMEDFileRead.getMeshAtLevel(0)
+  # Barycenter of the cells
+  # =======================
+    cg_hexa_ml = mesh_read0.computeIsoBarycenterOfNodesPerCell()
+    cg_hexa = cg_hexa_ml.toNumPyArray()
+  # Target
+  # ======
+    xyz_p = np.zeros(3, dtype=np.float)
+    xyz_p[0] = -0.20*float(1-niter) * LG_X
+    xyz_p[1] = -0.15*float(1-niter) * LG_Y
+    xyz_p[2] = -0.10*float(1-niter) * LG_Z
+  # Values of the field
+  # ===================
+    nbr_cell_3d = mesh_read0.getNumberOfCells()
+    valeur = mc.DataArrayDouble(nbr_cell_3d)
+    for num_mail in range(nbr_cell_3d) :
+      #ligne   = "x = %f" % cg_hexa[num_mail][0]
+      #ligne  += ", y = %f" % cg_hexa[num_mail][1]
+      #ligne  += ", z = %f" % cg_hexa[num_mail][2]
+      #print ligne
+      distance = np.linalg.norm(cg_hexa[num_mail]-xyz_p)
+      valeur[num_mail] = 1.e0 / max ( 1.e-5, distance)
+    #print ". valeur", valeur
+    nparr = valeur.toNumPyArray()
+    print ". mini/maxi", nparr.min(), nparr.max()
+  #
+  # Creation of the field
+  # =====================
+    field = ml.MEDCouplingFieldDouble(ml.ON_CELLS, ml.ONE_TIME)
+    field.setArray(valeur)
+    field.setMesh(mesh_read0)
+    field.setName("DISTANCE")
+  #
+    fMEDFile_ch = ml.MEDFileField1TS()
+    fMEDFile_ch.setFieldNoProfileSBT(field)     # No profile desired on the field, Sort By Type
+    fMEDFile_ch.write(ficmed, 0) # 0 to indicate that we *append* (and no overwrite) to the MED file
+  #
+    break
+  #
+  return error, ficmed
+
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  error = 0
+#
+  while not error :
+  #
+    HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation of the hypothese DISTANCE INVERSE
+  # ==========================================
+    hyponame = "DISTANCE INVERSE"
+    print "-------- Creation of the hypothesis", hyponame
+    hypo_5 = HOMARD.CreateHypothesis(hyponame)
+    hypo_5.SetField('DISTANCE')
+    hypo_5.SetUseComp(0)
+    hypo_5.SetRefinThr(1, 0.020)
+    hypo_5.SetUnRefThr(1, 0.015)
+    print hyponame, " : champ utilisé :", hypo_5.GetFieldName()
+    print ".. caractéristiques de l'adaptation :", hypo_5.GetField()
+  #
+  # Creation of the cases
+  # =====================
+    # Creation of the case
+    print "-------- Creation of the case", TEST_NAME
+    mesh_file = os.path.join(DIRCASE, 'maill.00.med')
+    case_test_5 = HOMARD.CreateCase(TEST_NAME, 'MESH', mesh_file)
+    case_test_5.SetDirName(DIRCASE)
+    case_test_5.SetConfType(1)
+    case_test_5.SetExtType(1)
+  #
+  # Creation of the iterations
+  # ==========================
+  #
+    for niter in range(N_ITER_TEST_FILE) :
+  #
+      s_niterp1 = "%02d" % (niter + 1)
+    #
+    # Creation of the indicator
+    #
+      error, ficmed_indic = field_exec(theStudy, niter)
+      if error :
+        error = 10
+        break
+    #
+    # Creation of the iteration
+    #
+      iter_name = "I_" + TEST_NAME + "_" + s_niterp1
+      print "-------- Creation of the iteration", iter_name
+      if ( niter == 0 ) :
+        iter_test_5 = case_test_5.NextIteration(iter_name)
+      else :
+        iter_test_5 = iter_test_5.NextIteration(iter_name)
+      iter_test_5.AssociateHypo(hyponame)
+      iter_test_5.SetFieldFile(ficmed_indic)
+      iter_test_5.SetMeshName(MESH_NAME+"_" + s_niterp1)
+      iter_test_5.SetMeshFile(os.path.join(DIRCASE, "maill."+s_niterp1+".med"))
+      error = iter_test_5.Compute(1, 2)
+      if error :
+        error = 20
+        break
+  #
+    break
+  #
+  return error
+
+#========================================================================
+#
+# Geometry and Mesh
+#
+try :
+  ERROR = mesh_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in mesh_exec')
+except Exception, eee:
+  raise Exception('Pb in mesh_exec: '+eee.message)
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load homard engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/test_util.py b/src/tests/Test/test_util.py
new file mode 100755 (executable)
index 0000000..ad38227
--- /dev/null
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Utilitaires pour les tests
+"""
+__revision__ = "V1.4"
+
+import os
+#========================================================================
+#========================================================================
+def remove_dir(directory) :
+  """
+Empties, then removes a directory.
+Copyright EDF-R&D 2013
+  """
+#
+  l_aux = os.listdir(directory)
+  for fic in l_aux :
+    fic_a = os.path.join(directory, fic)
+    if os.path.isdir(fic_a) :
+      remove_dir(fic_a)
+    else :
+      os.remove(fic_a)
+  os.rmdir(directory)
+#
+  return
+#
+#========================================================================
+#========================================================================
+def test_results(rep_test, test_name, dircase, n_iter_test_file, n_rep_test_file, destroy_dir = True) :
+  """
+Test of the result
+rep_test: repertoire des tests
+test_name: nom du test
+dircase: repertoire des resultats du test
+n_iter_test_file: numero de l'iteration a tester
+n_rep_test_file: numero du repertoire de l'iteration a tester
+destroy_dir: destruction du repertoire de calcul
+Copyright EDF-R&D 2014
+  """
+  #
+  test_file_suff = "apad.%02d.bilan" % n_iter_test_file
+  rep_test_file = "I%02d" % n_rep_test_file
+  #
+  test_file = os.path.join(rep_test, test_name + "." + test_file_suff)
+  mess_error_ref = "\nReference file: " + test_file
+#
+# Existence du fichier de référence
+#
+  try :
+    file = open (test_file, "r")
+    les_lignes_ref = file.readlines()
+    file.close()
+  except :
+    mess_error = mess_error_ref + "\nThis file does not exist.\n"
+    destroy_dir = False
+    raise Exception(mess_error)
+#
+# Existence du fichier de l'exécution courante
+#
+  test_file = os.path.join(dircase, rep_test_file, test_file_suff)
+  if os.path.isfile (test_file) :
+    file = open (test_file, "r")
+    les_lignes = file.readlines()
+    file.close()
+  else :
+    mess_error  = "\nResult file: " + test_file
+    mess_error += "\nThis file does not exist.\n"
+    destroy_dir = False
+    raise Exception(mess_error)
+#
+# Nombre de lignes identiques
+#
+  nblign = len(les_lignes_ref)
+  if ( len(les_lignes) != nblign ):
+    mess_error = mess_error_ref +  "\nResult file: " + test_file
+    mess_error += "\nThe number of lines of the files are not the same.\n"
+    destroy_dir = False
+    raise Exception(mess_error)
+#
+# Comparaison des lignes, à l'esception de la date
+#
+  for num in range(nblign) :
+    if ( "creation" not in les_lignes_ref[num] ) :
+      if ( les_lignes_ref[num] != les_lignes[num] ) :
+        message_erreur = "\nRefe : " + les_lignes_ref[num]
+        message_erreur += "Test : " + les_lignes[num][:-1]
+        message_erreur += "\nThe test is different from the reference."
+        destroy_dir = False
+        raise Exception(message_erreur)
+#
+# Destruction éventuelle du répertoire du calcul
+#
+  if destroy_dir:
+    remove_dir(dircase)
+#
+  return
+#
+#========================================================================
+#========================================================================
diff --git a/src/tests/Test/tutorial_1.py b/src/tests/Test/tutorial_1.py
new file mode 100755 (executable)
index 0000000..201490b
--- /dev/null
@@ -0,0 +1,142 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test tutorial_1 associe au tutorial 1
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "tutorial_1"
+DEBUG = False
+N_ITER_TEST_FILE = 3
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 1, -1)
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  #
+  homard.SetCurrentStudy(theStudy)
+  #
+  # Hypotheses
+  # ==========
+  hypo_1 = homard.CreateHypothesis('hypo_1')
+  hypo_1.SetUnifRefinUnRef(1)
+  #
+  # Cas
+  # ===
+  case_1 = homard.CreateCase('case_1', 'MAILL', DATA_TUTORIAL+'/tutorial_1.00.med')
+  case_1.SetDirName(DIRCASE)
+  #
+  # Iterations
+  # ==========
+  # Iteration "iter_1_1"
+  iter_1_1 = case_1.NextIteration('iter_1_1')
+  iter_1_1.SetMeshName('MESH')
+  iter_1_1.SetMeshFile(DIRCASE+'/maill.01.med')
+  iter_1_1.AssociateHypo('hypo_1')
+  error = iter_1_1.Compute(1, 2)
+
+  # Iteration "iter_1_2"
+  iter_1_2 = iter_1_1.NextIteration('iter_1_2')
+  iter_1_2.SetMeshName('MESH')
+  iter_1_2.SetMeshFile(DIRCASE+'/maill.02.med')
+  iter_1_2.AssociateHypo('hypo_1')
+  error = iter_1_2.Compute(1, 2)
+
+  # Iteration "iter_1_3"
+  iter_1_3 = iter_1_2.NextIteration('iter_1_3')
+  iter_1_3.SetMeshName('MESH')
+  iter_1_3.SetMeshFile(DIRCASE+'/maill.03.med')
+  iter_1_3.AssociateHypo('hypo_1')
+  error = iter_1_3.Compute(1, 2)
+  #
+  return error
+
+#========================================================================
+
+homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert homard is not None, "Impossible to load homard engine"
+homard.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 1, 1)
+# ==================================
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/tutorial_2.py b/src/tests/Test/tutorial_2.py
new file mode 100755 (executable)
index 0000000..ee9802d
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test tutorial_2 associe au tutorial 2
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "tutorial_2"
+DEBUG = False
+N_ITER_TEST_FILE = 2
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 2, -1)
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  #
+  HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Creation des zones
+  # ==================
+  # Box "Zone_12_0"
+  zone_12_0 = HOMARD.CreateZoneBox ('Zone_12_0', -0.1, 1.1, -0.1, 1.1, 0.9, 1.1)
+  #
+  # Sphere "Zone_12_1"
+  zone_12_1 = HOMARD.CreateZoneSphere ('Zone_12_1', 0., 0., 0., 1.05)
+  #
+  # Box "Zone_12_2"
+  zone_12_2 = HOMARD.CreateZoneBox ('Zone_12_2', -0.1, 0.51, -0.1, 0.51, -0.1, 0.51)
+  #
+  # Hypothese "hypo_2"
+  # ==================
+  hypo_2 = HOMARD.CreateHypothesis('hypo_2')
+  hypo_2.AddZone('Zone_12_1', 1)
+  hypo_2.AddZone('Zone_12_0', 1)
+  #
+  # Hypothese "hypo_2_bis"
+  # ======================
+  hypo_2_bis = HOMARD.CreateHypothesis('hypo_2_bis')
+  hypo_2_bis.AddZone('Zone_12_0', -1)
+  hypo_2_bis.AddZone('Zone_12_2', 1)
+  #
+  # Cas
+  # ===
+  case_2 = HOMARD.CreateCase('case_2', 'MZERO', DATA_TUTORIAL+'/tutorial_2.00.med')
+  case_2.SetDirName(DIRCASE)
+  #
+  # Iteration "iter_2_1"
+  # ====================
+  iter_2_1 = case_2.NextIteration('iter_2_1')
+  iter_2_1.SetMeshName('M_1')
+  iter_2_1.SetMeshFile(DIRCASE+'/maill.01.med')
+  iter_2_1.AssociateHypo('hypo_2')
+  error = iter_2_1.Compute(1, 2)
+  #
+  # Iteration "iter_2_2"
+  # ====================
+  iter_2_2 = iter_2_1.NextIteration('iter_2_2')
+  iter_2_2.SetMeshName('M_2')
+  iter_2_2.SetMeshFile(DIRCASE+'/maill.02.med')
+  iter_2_2.AssociateHypo('hypo_2_bis')
+  error = iter_2_2.Compute(1, 2)
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load HOMARD engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 2, 1)
+# ==================================
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/tutorial_3.py b/src/tests/Test/tutorial_3.py
new file mode 100755 (executable)
index 0000000..8a04306
--- /dev/null
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test tutorial_3 associe au tutorial 3
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "tutorial_3"
+DEBUG = False
+N_ITER_TEST_FILE = 2
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 3, -1)
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  #
+  HOMARD.SetCurrentStudy(theStudy)
+  #
+  # Hypothese "hypo_0vers1"
+  # =======================
+  hypo_0vers1 = HOMARD.CreateHypothesis('hypo_0vers1')
+  # Characterization of the field
+  hypo_0vers1.SetField('SOLU_0__QIRE_ELEM_SIGM__________')
+  hypo_0vers1.SetUseComp(0)
+  hypo_0vers1.AddComp('ERREST          ')
+  hypo_0vers1.SetRefinThr(3, 1.0)
+  hypo_0vers1.SetTypeFieldInterp(2)
+  hypo_0vers1.AddFieldInterp('SOLU_0__DEPL____________________')
+  hypo_0vers1.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________')
+  #
+  # Hypothese "hypo_1vers2"
+  # =======================
+  hypo_1vers2 = HOMARD.CreateHypothesis('hypo_1vers2')
+  # Characterization of the field
+  hypo_1vers2.SetField('SOLU_1__QIRE_ELEM_SIGM__________')
+  hypo_1vers2.SetUseComp(0)
+  hypo_1vers2.AddComp('ERREST          ')
+  hypo_1vers2.SetRefinThr(3, 1.5)
+  hypo_1vers2.SetUnRefThr(3, 6.)
+  hypo_1vers2.SetTypeFieldInterp(2)
+  hypo_1vers2.AddFieldInterp('SOLU_1__DEPL____________________')
+  hypo_1vers2.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________')
+  #
+  # Hypothese "hypo_1vers2_bis"
+  # ===========================
+  hypo_1vers2_bis = HOMARD.CreateHypothesis('hypo_1vers2_bis')
+  # Characterization of the field
+  hypo_1vers2_bis.SetField('SOLU_1__DEPL____________________')
+  hypo_1vers2_bis.SetUseComp(1)
+  hypo_1vers2_bis.AddComp('DX')
+  hypo_1vers2_bis.AddComp('DY')
+  hypo_1vers2_bis.AddComp('DZ')
+  hypo_1vers2_bis.SetRefinThr(1, 0.0001)
+  hypo_1vers2_bis.SetUnRefThr(1, 0.000001)
+  hypo_1vers2_bis.SetTypeFieldInterp(0)
+  #
+  # Cas
+  # ===
+  case_3 = HOMARD.CreateCase('case_3', 'G_0', DATA_TUTORIAL+'/tutorial_3.00.med')
+  case_3.SetDirName(DIRCASE)
+  #
+  # Iteration "iter_3_1"
+  # ====================
+  iter_3_1 = case_3.NextIteration('iter_3_1')
+  iter_3_1.SetMeshName('H_1')
+  iter_3_1.SetMeshFile(DIRCASE+'/maill.01.med')
+  iter_3_1.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.00.med')
+  iter_3_1.SetTimeStepRank( 1, 1)
+  iter_3_1.AssociateHypo('hypo_0vers1')
+  error = iter_3_1.Compute(1, 2)
+  #
+  # Iteration "iter_3_2"
+  # ====================
+  iter_3_2 = iter_3_1.NextIteration('iter_3_2')
+  iter_3_2.SetMeshName('H_2')
+  iter_3_2.SetMeshFile(DIRCASE+'/maill.02.med')
+  iter_3_2.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.01.med')
+  iter_3_2.SetTimeStepRank(1, 1)
+  iter_3_2.AssociateHypo('hypo_1vers2')
+  error = iter_3_2.Compute(1, 2)
+  #
+  # Iteration "iter_3_2_bis"
+  # ========================
+  iter_3_2_bis = iter_3_1.NextIteration('iter_3_2_bis')
+  iter_3_2_bis.SetMeshName('H_2_bis')
+  iter_3_2_bis.SetMeshFile(DIRCASE+'/maill.02.bis.med')
+  iter_3_2_bis.SetFieldFile(DATA_TUTORIAL+'/tutorial_3.01.med')
+  iter_3_2_bis.SetTimeStepRank(1, 1)
+  iter_3_2_bis.AssociateHypo('hypo_1vers2_bis')
+  error = iter_3_2_bis.Compute(1, 2)
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load HOMARD engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = 3
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 3, 1)
+# ==================================
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/tutorial_4.py b/src/tests/Test/tutorial_4.py
new file mode 100755 (executable)
index 0000000..676b287
--- /dev/null
@@ -0,0 +1,169 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test tutorial_4 associe au tutorial 4
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "tutorial_4"
+DEBUG = False
+N_ITER_TEST_FILE = 3
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 4, -1)
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  #
+  HOMARD.SetCurrentStudy(theStudy)
+#
+  # Frontieres
+  # ==========
+  boun_4_1 = HOMARD.CreateBoundaryDi('intersection', 'PIQUAGE', DATA_TUTORIAL+'/tutorial_4.fr.med')
+  #
+  boun_4_2 = HOMARD.CreateBoundaryCylinder('cyl_1_ext', 0.0, 25., -25., 25., 50., 75., 100.)
+  #
+  boun_4_3 = HOMARD.CreateBoundaryCylinder('cyl_2_ext', 17.5, -2.5, -12.5, -100., -75., -25., 50.)
+  #
+  boun_4_4 = HOMARD.CreateBoundaryCylinder('cyl_1_int', 0.0, 25., -25., 25., 50., 75., 75.)
+  #
+  boun_4_5 = HOMARD.CreateBoundaryCylinder('cyl_2_int', 17.5, -2.5, -12.5, -100., -75., -25., 25.)
+  #
+  # Hypotheses
+  # ==========
+  # Creation of the hypothesis hypo_4
+  hypo_4 = HOMARD.CreateHypothesis('hypo_4')
+  hypo_4.SetUnifRefinUnRef(1)
+  hypo_4.AddGroup('T1_INT_I')
+  hypo_4.AddGroup('T1_INT_O')
+  hypo_4.AddGroup('T2_INT')
+  # Creation of the hypothesis hypo_4_bis
+  hypo_4_bis = HOMARD.CreateHypothesis('hypo_4_bis')
+  hypo_4_bis.SetUnifRefinUnRef(1)
+  hypo_4_bis.AddGroup('T1_EXT_I')
+  hypo_4_bis.AddGroup('T1_EXT_O')
+  hypo_4_bis.AddGroup('T2_EXT')
+  #
+  # Cas
+  # ===
+  case_4 = HOMARD.CreateCase('case_4', 'PIQUAGE', DATA_TUTORIAL+'/tutorial_4.00.med')
+  case_4.SetDirName(DIRCASE)
+  case_4.AddBoundaryGroup( 'intersection', '' )
+  case_4.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_I' )
+  case_4.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_I' )
+  case_4.AddBoundaryGroup( 'cyl_1_int', 'T1_INT_O' )
+  case_4.AddBoundaryGroup( 'cyl_1_ext', 'T1_EXT_O' )
+  case_4.AddBoundaryGroup( 'cyl_2_int', 'T2_INT' )
+  case_4.AddBoundaryGroup( 'cyl_2_ext', 'T2_EXT' )
+  #
+  # Iterations
+  # ==========
+  # Iteration iter_4_1 : raffinement selon les faces internes
+  iter_4_1 = case_4.NextIteration('iter_4_1')
+  iter_4_1.SetMeshName('PIQUAGE_1')
+  iter_4_1.SetMeshFile(DIRCASE+'/maill.01.med')
+  iter_4_1.AssociateHypo('hypo_4')
+  error = iter_4_1.Compute(1, 2)
+  # Iteration iter_4_2 : raffinement selon les faces externes
+  iter_4_2 = iter_4_1.NextIteration('iter_4_2')
+  iter_4_2.SetMeshName('PIQUAGE_2')
+  iter_4_2.SetMeshFile(DIRCASE+'/maill.02.med')
+  iter_4_2.AssociateHypo('hypo_4_bis')
+  error = iter_4_2.Compute(1, 2)
+  # Iteration iter_4_3 : second raffinement selon les faces externes
+  iter_4_3 = iter_4_2.NextIteration('iter_4_3')
+  iter_4_3.SetMeshName('PIQUAGE_3')
+  iter_4_3.SetMeshFile(DIRCASE+'/maill.03.med')
+  iter_4_3.AssociateHypo('hypo_4_bis')
+  error = iter_4_3.Compute(1, 2)
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load HOMARD engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 4, 1)
+# ==================================
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/Test/tutorial_5.py b/src/tests/Test/tutorial_5.py
new file mode 100755 (executable)
index 0000000..c79201f
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2011-2016  CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+Python script for HOMARD
+Test tutorial_5 associe au tutorial 5
+"""
+__revision__ = "V3.1"
+
+#========================================================================
+TEST_NAME = "tutorial_5"
+DEBUG = False
+N_ITER_TEST_FILE = 2
+#========================================================================
+import os
+import tempfile
+import sys
+import HOMARD
+import salome
+#
+# ==================================
+PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
+# Repertoire des scripts utilitaires
+REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
+REP_PYTHON = os.path.normpath(REP_PYTHON)
+sys.path.append(REP_PYTHON)
+from test_util import remove_dir
+from test_util import test_results
+# Repertoire des donnees du test
+REP_DATA = os.path.join(PATH_HOMARD, "share", "salome", "homardsamples")
+REP_DATA = os.path.normpath(REP_DATA)
+# Repertoire des resultats
+if DEBUG :
+  DIRCASE = os.path.join("/tmp", TEST_NAME)
+  if ( os.path.isdir(DIRCASE) ) :
+    remove_dir(DIRCASE)
+  os.mkdir(DIRCASE)
+else :
+  DIRCASE = tempfile.mkdtemp()
+# Repertoire des donnees du tutorial
+DATA_TUTORIAL = os.path.join(PATH_HOMARD, "share", "doc", "salome", "gui", "HOMARD", "fr", "_downloads")
+DATA_TUTORIAL = os.path.normpath(DATA_TUTORIAL)
+sys.path.append(DATA_TUTORIAL)
+from tutorial_util import gzip_gunzip
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 5, -1)
+# ==================================
+
+salome.salome_init()
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+IPAR.append("AP_MODULES_LIST", "Homard")
+#
+#========================================================================
+#========================================================================
+def homard_exec(theStudy):
+  """
+Python script for HOMARD
+  """
+  #
+  HOMARD.SetCurrentStudy(theStudy)
+#
+  # Frontiere
+  # =========
+  # Creation of the discrete boundary Boun_5_1
+  boun_5_1 = HOMARD.CreateBoundaryDi('Boun_5_1', 'MAIL_EXT', DATA_TUTORIAL+'/tutorial_5.fr.med')
+  #
+  # Creation des zones
+  # ==================
+  # Creation of the disk with hole enveloppe
+  enveloppe = HOMARD.CreateZoneDiskWithHole( 'enveloppe', 0., 0., 250., 193., 1 )
+  # Creation of the rectangle quart_sup
+  quart_sup = HOMARD.CreateZoneBox2D( 'quart_sup', 0., 250., 0., 250., 1 )
+  #
+  # Hypotheses
+  # ==========
+  # Creation of the hypothesis hypo_5
+  hypo_5 = HOMARD.CreateHypothesis('hypo_5')
+  hypo_5.AddZone('enveloppe', 1)
+  # Creation of the hypothesis hypo_5_bis
+  hypo_5_bis = HOMARD.CreateHypothesis('hypo_5_bis')
+  hypo_5_bis.AddZone('quart_sup', 1)
+  #
+  # Cas
+  # ===
+  case_5 = HOMARD.CreateCase('case_5', 'COEUR_2D', DATA_TUTORIAL+'/tutorial_5.00.med')
+  case_5.SetDirName(DIRCASE)
+  case_5.SetConfType(1)
+  case_5.AddBoundaryGroup('Boun_5_1', '')
+  #
+  # Iteration "iter_5_1"
+  # ====================
+  iter_5_1 = case_5.NextIteration('iter_5_1')
+  iter_5_1.SetMeshName('COEUR_2D_01')
+  iter_5_1.SetMeshFile(DIRCASE+'/maill.01.med')
+  iter_5_1.AssociateHypo('hypo_5')
+  error = iter_5_1.Compute(1, 2)
+  #
+  # Iteration "iter_5_2"
+  # ====================
+  iter_5_2 = iter_5_1.NextIteration('iter_5_2')
+  iter_5_2.SetMeshName('COEUR_2D_02')
+  iter_5_2.SetMeshFile(DIRCASE+'/maill.02.med')
+  iter_5_2.AssociateHypo('hypo_5_bis')
+  error = iter_5_2.Compute(1, 2)
+  #
+  return error
+
+#========================================================================
+
+HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
+assert HOMARD is not None, "Impossible to load HOMARD engine"
+HOMARD.SetLanguageShort("fr")
+#
+# Exec of HOMARD-SALOME
+#
+try :
+  ERROR = homard_exec(salome.myStudy)
+  if ERROR :
+    raise Exception('Pb in homard_exec at iteration %d' %ERROR )
+except Exception, eee:
+  raise Exception('Pb in homard_exec: '+eee.message)
+#
+# Test of the results
+#
+N_REP_TEST_FILE = N_ITER_TEST_FILE
+DESTROY_DIR = not DEBUG
+test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
+#
+# ==================================
+gzip_gunzip(DATA_TUTORIAL, 5, 1)
+# ==================================
+#
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
+  iparameters.getSession().restoreVisualState(1)
+
diff --git a/src/tests/samples/test_1.00.med b/src/tests/samples/test_1.00.med
new file mode 100644 (file)
index 0000000..316e140
Binary files /dev/null and b/src/tests/samples/test_1.00.med differ
diff --git a/src/tests/samples/test_1.01.med b/src/tests/samples/test_1.01.med
new file mode 100644 (file)
index 0000000..661ce23
Binary files /dev/null and b/src/tests/samples/test_1.01.med differ
diff --git a/src/tests/samples/test_1.02.med b/src/tests/samples/test_1.02.med
new file mode 100644 (file)
index 0000000..1a9688c
Binary files /dev/null and b/src/tests/samples/test_1.02.med differ
diff --git a/src/tests/samples/test_1.apad.03.bilan b/src/tests/samples/test_1.apad.03.bilan
new file mode 100644 (file)
index 0000000..0204654
--- /dev/null
@@ -0,0 +1,74 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MAILL                                                                           
+     Date de creation : jeudi 3 avril 2014 a 11 h 45 mn 28 s            
+     Dimension : 3
+     Degre : 2
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     1
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     X                | INCONNUE          |  0.0000    |  1.0000    
+     Y                | INCONNUE          |  0.0000    |  1.0000    
+     Z                | INCONNUE          |  0.0000    |  1.0000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *        379 *
+     * . dont sommets d'aretes                     *         67 *
+     * . dont milieux d'aretes                     *        312 *
+     ************************************************************
+
+     ************************************************************
+     *                      Mailles-Points                      *
+     ************************************************************
+     * Nombre total                                *          2 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *          2 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *          2 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *         98 *
+     * . dont triangles de regions 2D              *          0 *
+     * . dont triangles de bord                    *         98 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *         22 *
+     * . du niveau   1.5                           *         28 *
+     * . du niveau   2                             *         48 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *        197 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *         13 *
+     * . du niveau   1.5                           *         64 *
+     * . du niveau   2                             *        120 *
+     ************************************************************
diff --git a/src/tests/samples/test_1.en.odt b/src/tests/samples/test_1.en.odt
new file mode 100644 (file)
index 0000000..005ba6a
Binary files /dev/null and b/src/tests/samples/test_1.en.odt differ
diff --git a/src/tests/samples/test_1.en.pdf b/src/tests/samples/test_1.en.pdf
new file mode 100644 (file)
index 0000000..909cb28
Binary files /dev/null and b/src/tests/samples/test_1.en.pdf differ
diff --git a/src/tests/samples/test_1.odt b/src/tests/samples/test_1.odt
new file mode 100644 (file)
index 0000000..cd2a657
Binary files /dev/null and b/src/tests/samples/test_1.odt differ
diff --git a/src/tests/samples/test_1.pdf b/src/tests/samples/test_1.pdf
new file mode 100644 (file)
index 0000000..caa7941
Binary files /dev/null and b/src/tests/samples/test_1.pdf differ
diff --git a/src/tests/samples/test_1.png b/src/tests/samples/test_1.png
new file mode 100644 (file)
index 0000000..046034c
Binary files /dev/null and b/src/tests/samples/test_1.png differ
diff --git a/src/tests/samples/test_2.00.med b/src/tests/samples/test_2.00.med
new file mode 100644 (file)
index 0000000..b4ada0f
Binary files /dev/null and b/src/tests/samples/test_2.00.med differ
diff --git a/src/tests/samples/test_2.apad.03.bilan b/src/tests/samples/test_2.apad.03.bilan
new file mode 100644 (file)
index 0000000..a236e7e
--- /dev/null
@@ -0,0 +1,53 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     PLAQUE_0                                                                        
+     Date de creation : jeudi 3 avril 2014 a 13 h 21 mn 21 s            
+     Dimension : 3
+     Degre : 2
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     X                | INCONNUE          |-0.40000E-01| 0.40000E-01
+     Y                | INCONNUE          |-0.30000E-01| 0.30000E-01
+     Z                | INCONNUE          |-0.30854E-01| 0.30854E-01
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       1212 *
+     * . dont sommets d'aretes                     *        317 *
+     * . dont milieux d'aretes                     *        895 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        101 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *         53 *
+     * . dont aretes internes aux faces/volumes    *         48 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *        579 *
+     ************************************************************
+     * . du niveau   0                             *         33 *
+     * . du niveau   0.5                           *         14 *
+     * . du niveau   1                             *        148 *
+     * . du niveau   1.5                           *         48 *
+     * . du niveau   2                             *        336 *
+     ************************************************************
diff --git a/src/tests/samples/test_2.en.odt b/src/tests/samples/test_2.en.odt
new file mode 100644 (file)
index 0000000..21ffeac
Binary files /dev/null and b/src/tests/samples/test_2.en.odt differ
diff --git a/src/tests/samples/test_2.en.pdf b/src/tests/samples/test_2.en.pdf
new file mode 100644 (file)
index 0000000..51e1c33
Binary files /dev/null and b/src/tests/samples/test_2.en.pdf differ
diff --git a/src/tests/samples/test_2.fr.med b/src/tests/samples/test_2.fr.med
new file mode 100644 (file)
index 0000000..33315ed
Binary files /dev/null and b/src/tests/samples/test_2.fr.med differ
diff --git a/src/tests/samples/test_2.odt b/src/tests/samples/test_2.odt
new file mode 100644 (file)
index 0000000..1bcc259
Binary files /dev/null and b/src/tests/samples/test_2.odt differ
diff --git a/src/tests/samples/test_2.pdf b/src/tests/samples/test_2.pdf
new file mode 100644 (file)
index 0000000..c9122cb
Binary files /dev/null and b/src/tests/samples/test_2.pdf differ
diff --git a/src/tests/samples/test_2.png b/src/tests/samples/test_2.png
new file mode 100644 (file)
index 0000000..dced743
Binary files /dev/null and b/src/tests/samples/test_2.png differ
diff --git a/src/tests/samples/test_3.00.med b/src/tests/samples/test_3.00.med
new file mode 100644 (file)
index 0000000..c76b750
Binary files /dev/null and b/src/tests/samples/test_3.00.med differ
diff --git a/src/tests/samples/test_3.apad.02.bilan b/src/tests/samples/test_3.apad.02.bilan
new file mode 100644 (file)
index 0000000..2b49601
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MOYEU                                                                           
+     Date de creation : jeudi 3 avril 2014 a 13 h 22 mn 30 s            
+     Dimension : 3
+     Degre : 1
+     C'est un maillage obtenu apres      2 adaptations.
+     Le niveau minimum actif est   :     2
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     x                | m                 | -36.603    |  536.60    
+     y                | m                 | -75.000    |  125.00    
+     z                | m                 | -125.00    |  75.000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       3710 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        156 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *        156 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *       3232 *
+     * . dont triangles de regions 2D              *          0 *
+     * . dont triangles de bord                    *       3232 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *       3232 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *      17280 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *      17280 *
+     ************************************************************
diff --git a/src/tests/samples/test_3.en.odt b/src/tests/samples/test_3.en.odt
new file mode 100644 (file)
index 0000000..0b65fe3
Binary files /dev/null and b/src/tests/samples/test_3.en.odt differ
diff --git a/src/tests/samples/test_3.en.pdf b/src/tests/samples/test_3.en.pdf
new file mode 100644 (file)
index 0000000..8981740
Binary files /dev/null and b/src/tests/samples/test_3.en.pdf differ
diff --git a/src/tests/samples/test_3.fr.med b/src/tests/samples/test_3.fr.med
new file mode 100644 (file)
index 0000000..99b15ca
Binary files /dev/null and b/src/tests/samples/test_3.fr.med differ
diff --git a/src/tests/samples/test_3.odt b/src/tests/samples/test_3.odt
new file mode 100644 (file)
index 0000000..a84751b
Binary files /dev/null and b/src/tests/samples/test_3.odt differ
diff --git a/src/tests/samples/test_3.pdf b/src/tests/samples/test_3.pdf
new file mode 100644 (file)
index 0000000..ffba80d
Binary files /dev/null and b/src/tests/samples/test_3.pdf differ
diff --git a/src/tests/samples/test_3.png b/src/tests/samples/test_3.png
new file mode 100644 (file)
index 0000000..19c94e8
Binary files /dev/null and b/src/tests/samples/test_3.png differ
diff --git a/src/tests/samples/test_4.apad.02.bilan b/src/tests/samples/test_4.apad.02.bilan
new file mode 100644 (file)
index 0000000..c1a9ff3
--- /dev/null
@@ -0,0 +1,96 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MESH                                                                            
+     Date de creation : lundi 2 novembre 2015 a 11 h 32 mn 46 s         
+     Dimension : 3
+     Degre : 1
+     C'est un maillage obtenu apres      2 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+                      |                   |  0.0000    |  600.00    
+                      |                   |  0.0000    |  400.00    
+                      |                   |  0.0000    |  200.00    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       1389 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        124 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *        124 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *         54 *
+     * . dont triangles de regions 2D              *         54 *
+     * . dont triangles de bord                    *          0 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *         54 *
+     ************************************************************
+
+     ************************************************************
+     *                      Quadrangles                         *
+     ************************************************************
+     * Nombre total                                *        616 *
+     * . dont quadrangles de regions 2D            *          9 *
+     * . dont quadrangles de bord                  *        607 *
+     * . dont quadrangles internes aux volumes     *          0 *
+     ************************************************************
+     * . du niveau   0                             *        503 *
+     * . du niveau   0.5                           *          9 *
+     * . du niveau   1                             *        104 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *        200 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *        192 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *          8 *
+     ************************************************************
+
+     ************************************************************
+     *                      Hexaedres                           *
+     ************************************************************
+     * Nombre total                                *        847 *
+     ************************************************************
+     * . du niveau   0                             *        657 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *        190 *
+     ************************************************************
+
+     ************************************************************
+     *                      Pyramides                           *
+     ************************************************************
+     * Nombre total                                *        454 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *        412 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *         42 *
+     ************************************************************
diff --git a/src/tests/samples/test_4.apad.03.bilan b/src/tests/samples/test_4.apad.03.bilan
new file mode 100644 (file)
index 0000000..9ab79c5
--- /dev/null
@@ -0,0 +1,98 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MESH                                                                            
+     Date de creation : mardi 3 novembre 2015 a 9 h 1 mn 54 s           
+     Dimension : 3
+     Degre : 1
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+                      |                   |  0.0000    |  600.00    
+                      |                   |  0.0000    |  400.00    
+                      |                   |  0.0000    |  200.00    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       2503 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        120 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *        120 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *        582 *
+     * . dont triangles de regions 2D              *        582 *
+     * . dont triangles de bord                    *          0 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *        558 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *         24 *
+     ************************************************************
+
+     ************************************************************
+     *                      Quadrangles                         *
+     ************************************************************
+     * Nombre total                                *        455 *
+     * . dont quadrangles de regions 2D            *         81 *
+     * . dont quadrangles de bord                  *        374 *
+     * . dont quadrangles internes aux volumes     *          0 *
+     ************************************************************
+     * . du niveau   0                             *        322 *
+     * . du niveau   0.5                           *         81 *
+     * . du niveau   1                             *         52 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *       1952 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *       1824 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *        128 *
+     ************************************************************
+
+     ************************************************************
+     *                      Hexaedres                           *
+     ************************************************************
+     * Nombre total                                *        523 *
+     ************************************************************
+     * . du niveau   0                             *        283 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *        240 *
+     ************************************************************
+
+     ************************************************************
+     *                      Pyramides                           *
+     ************************************************************
+     * Nombre total                                *       3559 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *       3239 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *        320 *
+     ************************************************************
diff --git a/src/tests/samples/test_4.en.odt b/src/tests/samples/test_4.en.odt
new file mode 100644 (file)
index 0000000..a5ade74
Binary files /dev/null and b/src/tests/samples/test_4.en.odt differ
diff --git a/src/tests/samples/test_4.en.pdf b/src/tests/samples/test_4.en.pdf
new file mode 100644 (file)
index 0000000..f45e2c5
Binary files /dev/null and b/src/tests/samples/test_4.en.pdf differ
diff --git a/src/tests/samples/test_4.odt b/src/tests/samples/test_4.odt
new file mode 100644 (file)
index 0000000..f9c6a4c
Binary files /dev/null and b/src/tests/samples/test_4.odt differ
diff --git a/src/tests/samples/test_4.pdf b/src/tests/samples/test_4.pdf
new file mode 100644 (file)
index 0000000..0dd4f45
Binary files /dev/null and b/src/tests/samples/test_4.pdf differ
diff --git a/src/tests/samples/test_5.apad.03.bilan b/src/tests/samples/test_5.apad.03.bilan
new file mode 100644 (file)
index 0000000..fcbc8ec
--- /dev/null
@@ -0,0 +1,53 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MESH                                                                            
+     Date de creation : mardi 19 juillet 2016 a 11 h 51 mn 14 s         
+     Dimension : 3
+     Degre : 1
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+                      |                   | -180.00    |  180.00    
+                      |                   | -120.00    |  120.00    
+                      |                   | -80.000    |  80.000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       2171 *
+     ************************************************************
+
+     ************************************************************
+     *                      Quadrangles                         *
+     ************************************************************
+     * Nombre total                                *        664 *
+     * . dont quadrangles de regions 2D            *          0 *
+     * . dont quadrangles de bord                  *        664 *
+     * . dont quadrangles internes aux volumes     *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   1                             *        488 *
+     * . du niveau   2                             *        176 *
+     ************************************************************
+
+     ************************************************************
+     *                      Hexaedres                           *
+     ************************************************************
+     * Nombre total                                *       1567 *
+     ************************************************************
+     * . du niveau   0                             *        933 *
+     * . du niveau   1                             *        522 *
+     * . du niveau   2                             *        112 *
+     ************************************************************
diff --git a/src/tests/samples/tutorial_1.apad.03.bilan b/src/tests/samples/tutorial_1.apad.03.bilan
new file mode 100644 (file)
index 0000000..dbe302a
--- /dev/null
@@ -0,0 +1,78 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MAILL                                                                           
+     Date de creation : jeudi 3 avril 2014 a 13 h 24 mn 23 s            
+     Dimension : 3
+     Degre : 2
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     3
+     Le niveau maximum atteint est :     3
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     X                | INCONNUE          |  0.0000    |  1.0000    
+     Y                | INCONNUE          |  0.0000    |  1.0000    
+     Z                | INCONNUE          |  0.0000    |  1.0000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       4913 *
+     * . dont sommets d'aretes                     *        729 *
+     * . dont milieux d'aretes                     *       4184 *
+     ************************************************************
+
+     ************************************************************
+     *                      Mailles-Points                      *
+     ************************************************************
+     * Nombre total                                *          2 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *          8 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *          8 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *        768 *
+     * . dont triangles de regions 2D              *          0 *
+     * . dont triangles de bord                    *        768 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *          0 *
+     * . du niveau   2.5                           *          0 *
+     * . du niveau   3                             *        768 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *       3072 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *          0 *
+     * . du niveau   2.5                           *          0 *
+     * . du niveau   3                             *       3072 *
+     ************************************************************
diff --git a/src/tests/samples/tutorial_2.apad.02.bilan b/src/tests/samples/tutorial_2.apad.02.bilan
new file mode 100644 (file)
index 0000000..c45015c
--- /dev/null
@@ -0,0 +1,74 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     MZERO                                                                           
+     Date de creation : jeudi 3 avril 2014 a 13 h 25 mn 10 s            
+     Dimension : 3
+     Degre : 2
+     C'est un maillage obtenu apres      2 adaptations.
+     Le niveau minimum actif est   :     1
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     X                | INCONNUE          |  0.0000    |  1.0000    
+     Y                | INCONNUE          |  0.0000    |  1.0000    
+     Z                | INCONNUE          |  0.0000    |  1.0000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *        231 *
+     * . dont sommets d'aretes                     *         43 *
+     * . dont milieux d'aretes                     *        188 *
+     ************************************************************
+
+     ************************************************************
+     *                      Mailles-Points                      *
+     ************************************************************
+     * Nombre total                                *          2 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *          3 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *          3 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *         66 *
+     * . dont triangles de regions 2D              *          0 *
+     * . dont triangles de bord                    *         66 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          6 *
+     * . du niveau   1                             *         24 *
+     * . du niveau   1.5                           *         12 *
+     * . du niveau   2                             *         24 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *        113 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          4 *
+     * . du niveau   1                             *         19 *
+     * . du niveau   1.5                           *         42 *
+     * . du niveau   2                             *         48 *
+     ************************************************************
diff --git a/src/tests/samples/tutorial_3.apad.02.bilan b/src/tests/samples/tutorial_3.apad.02.bilan
new file mode 100644 (file)
index 0000000..30afe19
--- /dev/null
@@ -0,0 +1,104 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     G_0                                                                             
+     Date de creation : lundi 2 novembre 2015 a 9 h 14 mn 1 s           
+     Dimension : 3
+     Degre : 2
+     C'est un maillage obtenu apres      2 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+     X                | INCONNUE          |  0.0000    | 0.60000    
+     Y                | INCONNUE          |  0.0000    | 0.30000    
+     Z                | INCONNUE          |  0.0000    | 0.20000    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *      14455 *
+     * . dont sommets d'aretes                     *       3839 *
+     * . dont milieux d'aretes                     *      10616 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        764 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *        764 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *        288 *
+     * . dont triangles de regions 2D              *        288 *
+     * . dont triangles de bord                    *          0 *
+     * . dont triangles internes aux volumes       *          0 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *        168 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *        120 *
+     ************************************************************
+
+     ************************************************************
+     *                      Quadrangles                         *
+     ************************************************************
+     * Nombre total                                *       2534 *
+     * . dont quadrangles de regions 2D            *          0 *
+     * . dont quadrangles de bord                  *       2534 *
+     * . dont quadrangles internes aux volumes     *          0 *
+     ************************************************************
+     * . du niveau   0                             *        142 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *       2296 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *         96 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *        256 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *         96 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *        160 *
+     ************************************************************
+
+     ************************************************************
+     *                      Hexaedres                           *
+     ************************************************************
+     * Nombre total                                *       2230 *
+     ************************************************************
+     * . du niveau   0                             *         66 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *       1972 *
+     * . du niveau   1.5                           *          0 *
+     * . du niveau   2                             *        192 *
+     ************************************************************
+
+     ************************************************************
+     *                      Pyramides                           *
+     ************************************************************
+     * Nombre total                                *        432 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *        120 *
+     * . du niveau   1                             *          0 *
+     * . du niveau   1.5                           *        312 *
+     ************************************************************
diff --git a/src/tests/samples/tutorial_4.apad.03.bilan b/src/tests/samples/tutorial_4.apad.03.bilan
new file mode 100644 (file)
index 0000000..45a987d
--- /dev/null
@@ -0,0 +1,65 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     PIQUAGE                                                                         
+     Date de creation : lundi 2 novembre 2015 a 9 h 13 mn 13 s          
+     Dimension : 3
+     Degre : 1
+     C'est un maillage obtenu apres      3 adaptations.
+     Le niveau minimum actif est   :     1
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+                      |                   | -230.00    |  136.45    
+                      |                   | -250.62    |  189.69    
+                      |                   | -285.21    |  155.03    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *      12825 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        758 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *          0 *
+     * . dont aretes internes aux faces/volumes    *        758 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *      20838 *
+     * . dont triangles de regions 2D              *          0 *
+     * . dont triangles de bord                    *      20560 *
+     * . dont triangles internes aux volumes       *        278 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *       3530 *
+     * . du niveau   1.5                           *        380 *
+     * . du niveau   2                             *      16928 *
+     ************************************************************
+
+     ************************************************************
+     *                      Tetraedres                          *
+     ************************************************************
+     * Nombre total                                *      43490 *
+     ************************************************************
+     * . du niveau   0                             *          0 *
+     * . du niveau   0.5                           *          0 *
+     * . du niveau   1                             *      18174 *
+     * . du niveau   1.5                           *      25316 *
+     ************************************************************
diff --git a/src/tests/samples/tutorial_5.apad.02.bilan b/src/tests/samples/tutorial_5.apad.02.bilan
new file mode 100644 (file)
index 0000000..c703911
--- /dev/null
@@ -0,0 +1,57 @@
+
+
+ANALYSE DU MAILLAGE
+===================
+
+     Maillage apres adaptation                         
+     COEUR_2D                                                                        
+     Date de creation : mardi 24 novembre 2015 a 9 h 33 mn 8 s          
+     Dimension : 2
+     Degre : 1
+     C'est un maillage obtenu apres      2 adaptations.
+     Le niveau minimum actif est   :     0
+     Le niveau maximum atteint est :     2
+
+         Direction    |       Unite       |  Minimum   |  Maximum
+     ---------------------------------------------------------------
+                      |                   | -248.00    |  248.00    
+                      |                   | -248.00    |  248.00    
+
+
+   NOMBRE D'ENTITES DU CALCUL
+   ==========================
+
+
+     ************************************************************
+     *                      Noeuds                              *
+     ************************************************************
+     * Nombre total                                *       1542 *
+     ************************************************************
+
+     ************************************************************
+     *                      Segments                            *
+     ************************************************************
+     * Nombre total                                *        418 *
+     * . dont aretes isolees                       *          0 *
+     * . dont aretes de bord de regions 2D         *        300 *
+     * . dont aretes internes aux faces/volumes    *        118 *
+     ************************************************************
+
+     ************************************************************
+     *                      Triangles                           *
+     ************************************************************
+     * Nombre total                                *       2204 *
+     ************************************************************
+     * . du niveau   0                             *         88 *
+     * . du niveau   1                             *        980 *
+     * . du niveau   2                             *       1136 *
+     ************************************************************
+
+     ************************************************************
+     *                      Quadrangles                         *
+     ************************************************************
+     * Nombre total                                *        334 *
+     ************************************************************
+     * . du niveau   0                             *        162 *
+     * . du niveau   1                             *        172 *
+     ************************************************************
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644 (file)
index d52be62..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-
-dist_salomeres_DATA =   \
-     test_1.pdf \
-     test_1.en.pdf \
-     test_1.py \
-     test_1.00.med \
-     test_1.01.med \
-     test_1.02.med \
-     test_1.apad.03.bilan \
-     test_2.pdf \
-     test_2.en.pdf \
-     test_2.py \
-     test_2.00.med \
-     test_2.fr.med \
-     test_2.apad.03.bilan \
-     test_3.pdf \
-     test_3.en.pdf \
-     test_3.py \
-     test_3.00.med \
-     test_3.fr.med \
-     test_3.apad.02.bilan
-
-EXTRA_DIST += \
-     test_1.odt \
-     test_1.en.odt \
-     test_1.png \
-     test_2.odt \
-     test_2.en.odt \
-     test_2.png \
-     test_3.odt \
-     test_3.en.odt \
-     test_3.png
diff --git a/tests/test_1.00.med b/tests/test_1.00.med
deleted file mode 100644 (file)
index 316e140..0000000
Binary files a/tests/test_1.00.med and /dev/null differ
diff --git a/tests/test_1.01.med b/tests/test_1.01.med
deleted file mode 100644 (file)
index 661ce23..0000000
Binary files a/tests/test_1.01.med and /dev/null differ
diff --git a/tests/test_1.02.med b/tests/test_1.02.med
deleted file mode 100644 (file)
index 1a9688c..0000000
Binary files a/tests/test_1.02.med and /dev/null differ
diff --git a/tests/test_1.apad.03.bilan b/tests/test_1.apad.03.bilan
deleted file mode 100644 (file)
index 1293ce1..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-ANALYSE DU MAILLAGE
-===================
-
-     Maillage apres adaptation                         
-     MAILL                                                                           
-     Date de creation : vendredi 1 octobre 2010 a 13 h 15 mn 42 s       
-     Dimension : 3
-     Degre : 2
-     C'est un maillage obtenu apres      3 adaptations.
-     Le niveau minimum actif est   :     1
-     Le niveau maximum atteint est :     2
-
-         Direction    |       Unite       |  Minimum   |  Maximum
-     ---------------------------------------------------------------
-     X                | INCONNUE          |  0.0000    |  1.0000    
-     Y                | INCONNUE          |  0.0000    |  1.0000    
-     Z                | INCONNUE          |  0.0000    |  1.0000    
-
-
-   NOMBRE D'ENTITES DU CALCUL
-   ==========================
-
-
-     ************************************************************
-     *                      Noeuds                              *
-     ************************************************************
-     * Nombre total                                *        379 *
-     * . dont sommets d'aretes                     *         67 *
-     * . dont milieux d'aretes                     *        312 *
-     ************************************************************
-
-     ************************************************************
-     *                      Mailles-Points                      *
-     ************************************************************
-     * Nombre total                                *          2 *
-     ************************************************************
-
-     ************************************************************
-     *                      Segments                            *
-     ************************************************************
-     * Nombre total                                *          2 *
-     * . dont aretes isolees                       *          0 *
-     * . dont aretes de bord de regions 2D         *          0 *
-     * . dont aretes internes aux faces/volumes    *          2 *
-     ************************************************************
-
-     ************************************************************
-     *                      Triangles                           *
-     ************************************************************
-     * Nombre total                                *         98 *
-     * . dont triangles de regions 2D              *          0 *
-     * . dont triangles de bord                    *         98 *
-     * . dont triangles internes aux volumes       *          0 *
-     ************************************************************
-     * . du niveau   0                             *          0 *
-     * . du niveau   1                             *         22 *
-     * . du niveau   2                             *         76 *
-     ************************************************************
-
-     ************************************************************
-     *                      Tetraedres                          *
-     ************************************************************
-     * Nombre total                                *        197 *
-     ************************************************************
-     * . du niveau   0                             *          0 *
-     * . du niveau   1                             *         13 *
-     * . du niveau   2                             *        184 *
-     ************************************************************
diff --git a/tests/test_1.en.odt b/tests/test_1.en.odt
deleted file mode 100644 (file)
index a728ba7..0000000
Binary files a/tests/test_1.en.odt and /dev/null differ
diff --git a/tests/test_1.en.pdf b/tests/test_1.en.pdf
deleted file mode 100644 (file)
index a0642bc..0000000
Binary files a/tests/test_1.en.pdf and /dev/null differ
diff --git a/tests/test_1.odt b/tests/test_1.odt
deleted file mode 100644 (file)
index 257405f..0000000
Binary files a/tests/test_1.odt and /dev/null differ
diff --git a/tests/test_1.pdf b/tests/test_1.pdf
deleted file mode 100644 (file)
index d663a40..0000000
Binary files a/tests/test_1.pdf and /dev/null differ
diff --git a/tests/test_1.png b/tests/test_1.png
deleted file mode 100644 (file)
index 046034c..0000000
Binary files a/tests/test_1.png and /dev/null differ
diff --git a/tests/test_1.py b/tests/test_1.py
deleted file mode 100644 (file)
index 01a0776..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
-Python script for HOMARD
-Copyright EDF-R&D 2010
-Test test_1
-"""
-__revision__ = "V1.6"
-
-######################################################################################
-Test_Name = "test_1"
-n_iter_test_file = 3
-######################################################################################
-import os
-import sys
-import tempfile
-import HOMARD
-import salome
-#
-pathHomard=os.getenv('HOMARD_ROOT_DIR')
-Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard")
-Rep_Test_Resu = tempfile.mktemp()
-os.mkdir(Rep_Test_Resu)
-
-salome.salome_init()
-import iparameters
-ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
-ipar.append("AP_MODULES_LIST", "Homard")
-######################################################################################
-######################################################################################
-def homard_exec(theStudy):
-  """
-Python script for HOMARD
-Copyright EDF-R&D 2010
-  """
-  error = 0
-#
-  while not error :
-  #
-    homard.SetCurrentStudy(theStudy)
-  #
-  # Creation of the zones
-  # =====================
-  # Creation of the box Zone_1
-    Zone_1 = homard.CreateZoneBox('Zone_1', -0.01, 1.01, -0.01, 0.4, -0.01, 0.6)
-
-  # Creation of the sphere Zone_2
-    Zone_2 = homard.CreateZoneSphere('Zone_2', 0.5, 0.6, 0.7, 0.75)
-  #
-  # Creation of the hypotheses
-  # ==========================
-  # Creation of the hypothesis a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM = homard.CreateHypothesis('a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM')
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetAdapRefinUnRef(1, 1, 0)
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetField('RESU____ERRE_ELEM_SIGM__________')
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetUseComp(0)
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddComp('ERREST')
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetRefinThr(3, 10.1)
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.SetTypeFieldInterp(2)
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddFieldInterp('RESU____DEPL____________________')
-    a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM.AddFieldInterp('RESU____ERRE_ELEM_SIGM__________')
-  # Creation of the hypothesis Zones_1_et_2
-    Zones_1_et_2 = homard.CreateHypothesis('Zones_1_et_2')
-    Zones_1_et_2.SetAdapRefinUnRef(0, 1, 0)
-    homard.AssociateHypoZone('Zones_1_et_2', 'Zone_1', 1)
-    homard.AssociateHypoZone('Zones_1_et_2', 'Zone_2', 1)
-  #
-  # Creation of the cases
-  # =====================
-    # Creation of the case zzzz121b
-    Case_1 = homard.CreateCase('zzzz121b', 'MAILL', os.path.join(Rep_Test, Test_Name + '.00.med'))
-    Case_1.SetDirName(Rep_Test_Resu)
-    Case_1.SetConfType(1)
-  #
-  # Creation of the iterations
-  # ==========================
-  # Creation of the iteration I1
-    I1 = homard.CreateIteration('I1', Case_1.GetIter0Name() )
-    I1.SetMeshName('M1')
-    I1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med'))
-    I1.SetFieldFile(os.path.join(Rep_Test, Test_Name + '.00.med'))
-    I1.SetTimeStepRank(1, 1)
-    homard.AssociateIterHypo('I1', 'a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM')
-    error = I1.Compute(1)
-    if error :
-      error = 1
-      break
-
-  # Creation of the iteration I2
-    I2 = homard.CreateIteration('I2', 'I1')
-    I2.SetMeshName('M2')
-    I2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med'))
-    I2.SetFieldFile(os.path.join(Rep_Test, Test_Name + '.01.med'))
-    I2.SetTimeStepRank(1, 1)
-    homard.AssociateIterHypo('I2', 'a10_1pc_de_mailles_a_raffiner_sur_ERRE_ELEM_SIGM')
-    error = I2.Compute(1)
-    if error :
-      error = 2
-      break
-
-  # Creation of the iteration I3
-    I3 = homard.CreateIteration('I3', 'I2')
-    I3.SetMeshName('M3')
-    I3.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.03.med'))
-    homard.AssociateIterHypo('I3', 'Zones_1_et_2')
-    error = I3.Compute(1)
-    if error :
-      error = 3
-      break
-  #
-    break
-  #
-    return error
-
-######################################################################################
-
-homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
-#
-# Exec of HOMARD-SALOME
-#
-try :
-  error_main = homard_exec(salome.myStudy)
-  if error_main :
-    raise Exception('Pb in homard_exec at iteration %d' %error_main )
-except :
-  raise Exception('Pb in homard_exec at iteration %d' %error_main )
-  sys.exit(1)
-#
-# Test of the result
-#
-s_iter_test_file = str(n_iter_test_file)
-test_file_suff = "apad.0" + s_iter_test_file + ".bilan"
-rep_test_file = "I0" + s_iter_test_file
-#
-test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff)
-mess_error_ref = "\nReference file: " + test_file
-try :
-  file = open (test_file, "r")
-  mess_ref = file.readlines()
-  file.close()
-except :
-  mess_error = mess_error_ref + "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-#
-test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff)
-if os.path.isfile (test_file) :
-   file = open (test_file, "r")
-   mess = file.readlines()
-   file.close()
-else :
-  mess_error  = "\nResult file: " + test_file
-  mess_error += "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-nblign = len(mess_ref)
-if ( len(mess) != nblign ):
-  mess_error = mess_error_ref +  "\nResult file: " + test_file
-  mess_error += "\nThe number of lines of the files are not the same.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-for num in range(nblign) :
-   if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) :
-       message_erreur = "\nRefe : " + mess_ref[num]
-       message_erreur += "Test : " + mess[num][:-1]
-       message_erreur += "\nThe test is different from the reference."
-       raise Exception(message_erreur)
-       sys.exit(10)
-#
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
-  iparameters.getSession().restoreVisualState(1)
-
diff --git a/tests/test_2.00.med b/tests/test_2.00.med
deleted file mode 100644 (file)
index b4ada0f..0000000
Binary files a/tests/test_2.00.med and /dev/null differ
diff --git a/tests/test_2.apad.03.bilan b/tests/test_2.apad.03.bilan
deleted file mode 100644 (file)
index c08aa05..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-ANALYSE DU MAILLAGE
-===================
-
-     Maillage apres adaptation                         
-     PLAQUE_0                                                                        
-     Date de creation : lundi 27 septembre 2010 a 9 h 25 mn 54 s        
-     Dimension : 3
-     Degre : 2
-     C'est un maillage obtenu apres      3 adaptations.
-     Le niveau minimum actif est   :     0
-     Le niveau maximum atteint est :     2
-
-         Direction    |       Unite       |  Minimum   |  Maximum
-     ---------------------------------------------------------------
-     X                | INCONNUE          |-0.40000E-01| 0.40000E-01
-     Y                | INCONNUE          |-0.30000E-01| 0.30000E-01
-     Z                | INCONNUE          |-0.30854E-01| 0.30854E-01
-
-
-   NOMBRE D'ENTITES DU CALCUL
-   ==========================
-
-
-     ************************************************************
-     *                      Noeuds                              *
-     ************************************************************
-     * Nombre total                                *       1212 *
-     * . dont sommets d'aretes                     *        317 *
-     * . dont milieux d'aretes                     *        895 *
-     ************************************************************
-
-     ************************************************************
-     *                      Segments                            *
-     ************************************************************
-     * Nombre total                                *        101 *
-     * . dont aretes isolees                       *          0 *
-     * . dont aretes de bord de regions 2D         *         53 *
-     * . dont aretes internes aux faces/volumes    *         48 *
-     ************************************************************
-
-     ************************************************************
-     *                      Triangles                           *
-     ************************************************************
-     * Nombre total                                *        579 *
-     ************************************************************
-     * . du niveau   0                             *         33 *
-     * . du niveau   1                             *        162 *
-     * . du niveau   2                             *        384 *
-     ************************************************************
diff --git a/tests/test_2.en.odt b/tests/test_2.en.odt
deleted file mode 100644 (file)
index 44de3cf..0000000
Binary files a/tests/test_2.en.odt and /dev/null differ
diff --git a/tests/test_2.en.pdf b/tests/test_2.en.pdf
deleted file mode 100644 (file)
index 75a9e87..0000000
Binary files a/tests/test_2.en.pdf and /dev/null differ
diff --git a/tests/test_2.fr.med b/tests/test_2.fr.med
deleted file mode 100644 (file)
index 33315ed..0000000
Binary files a/tests/test_2.fr.med and /dev/null differ
diff --git a/tests/test_2.odt b/tests/test_2.odt
deleted file mode 100644 (file)
index 03c6177..0000000
Binary files a/tests/test_2.odt and /dev/null differ
diff --git a/tests/test_2.pdf b/tests/test_2.pdf
deleted file mode 100644 (file)
index 0a058f3..0000000
Binary files a/tests/test_2.pdf and /dev/null differ
diff --git a/tests/test_2.png b/tests/test_2.png
deleted file mode 100644 (file)
index dced743..0000000
Binary files a/tests/test_2.png and /dev/null differ
diff --git a/tests/test_2.py b/tests/test_2.py
deleted file mode 100644 (file)
index 6011099..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
-Python script for HOMARD
-Copyright EDF-R&D 2010
-Test test_2
-"""
-__revision__ = "V1.5"
-
-######################################################################################
-Test_Name = "test_2"
-n_iter_test_file = 3
-######################################################################################
-import os
-import sys
-import tempfile
-import HOMARD
-import salome
-#
-pathHomard=os.getenv('HOMARD_ROOT_DIR')
-Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard")
-Rep_Test_Resu = tempfile.mktemp()
-os.mkdir(Rep_Test_Resu)
-
-salome.salome_init()
-import iparameters
-ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
-ipar.append("AP_MODULES_LIST", "Homard")
-######################################################################################
-######################################################################################
-def homard_exec(theStudy):
-  """
-Python script for HOMARD
-Copyright EDF-R&D 2010
-  """
-  error = 0
-#
-  while not error :
-  #
-    homard.SetCurrentStudy(theStudy)
-  #
-  # Creation of the boundaries
-  # ==========================
-  # Creation of the discrete boundary Boundary_1
-    Boundary_1 = homard.CreateBoundaryDi('internal_boundary', 'plaque', os.path.join(Rep_Test, Test_Name + '.fr.med'))
-  #
-  # Creation of the hypotheses
-  # ==========================
-  # Creation of the hypothesis Hypo_1
-    Hypo_1 = homard.CreateHypothesis('Hypo_1')
-    Hypo_1.SetAdapRefinUnRef(-1, 1, 0)
-    Hypo_1.AddGroup('EG')
-    Hypo_1.AddGroup('BANDE')
-
-  # Creation of the hypothesis Hypo_2
-    Hypo_2 = homard.CreateHypothesis('Hypo_2')
-    Hypo_2.SetAdapRefinUnRef(-1, 1, 0)
-    Hypo_2.AddGroup('M_D')
-  #
-  # Creation of the cases
-  # =====================
-    # Creation of the case Case_1
-    Case_1 = homard.CreateCase('Case_1', 'PLAQUE_0', os.path.join(Rep_Test, Test_Name + '.00.med'))
-    Case_1.SetDirName(Rep_Test_Resu)
-    Case_1.SetConfType(1)
-    Case_1.AddBoundaryGroup('internal_boundary', '')
-  #
-  # Creation of the iterations
-  # ==========================
-  # Creation of the iteration Iter_1
-    Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name() )
-    Iter_1.SetMeshName('PLAQUE_1')
-    Iter_1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med'))
-    homard.AssociateIterHypo('Iter_1', 'Hypo_1')
-    error = Iter_1.Compute(1)
-    if error :
-      error = 1
-      break
-
-  # Creation of the iteration Iter_2
-    Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-    Iter_2.SetMeshName('PLAQUE_2')
-    Iter_2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med'))
-    homard.AssociateIterHypo('Iter_2', 'Hypo_1')
-    error = Iter_2.Compute(1)
-    if error :
-      error = 2
-      break
-
-  # Creation of the iteration Iter_3
-    Iter_3 = homard.CreateIteration('Iter_3', 'Iter_2')
-    Iter_3.SetMeshName('PLAQUE_3')
-    Iter_3.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.03.med'))
-    homard.AssociateIterHypo('Iter_3', 'Hypo_2')
-    error = Iter_3.Compute(1)
-    if error :
-      error = 3
-      break
-  #
-    break
-  #
-    return error
-
-######################################################################################
-
-homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
-#
-# Exec of HOMARD-SALOME
-#
-try :
-  error_main = homard_exec(salome.myStudy)
-  if error_main :
-    raise Exception('Pb in homard_exec at iteration %d' %error_main )
-except :
-  raise Exception('Pb in homard_exec at iteration %d' %error_main )
-  sys.exit(1)
-#
-# Test of the result
-#
-s_iter_test_file = str(n_iter_test_file)
-test_file_suff = "apad.0" + s_iter_test_file + ".bilan"
-rep_test_file = "I0" + s_iter_test_file
-#
-test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff)
-mess_error_ref = "\nReference file: " + test_file
-try :
-  file = open (test_file, "r")
-  mess_ref = file.readlines()
-  file.close()
-except :
-  mess_error = mess_error_ref + "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-#
-test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff)
-if os.path.isfile (test_file) :
-   file = open (test_file, "r")
-   mess = file.readlines()
-   file.close()
-else :
-  mess_error  = "\nResult file: " + test_file
-  mess_error += "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-nblign = len(mess_ref)
-if ( len(mess) != nblign ):
-  mess_error = mess_error_ref +  "\nResult file: " + test_file
-  mess_error += "\nThe number of lines of the files are not the same.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-for num in range(nblign) :
-   if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) :
-       message_erreur = "\nRefe : " + mess_ref[num]
-       message_erreur += "Test : " + mess[num][:-1]
-       message_erreur += "\nThe test is different from the reference."
-       raise Exception(message_erreur)
-       sys.exit(10)
-#
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
-  iparameters.getSession().restoreVisualState(1)
-
diff --git a/tests/test_3.00.med b/tests/test_3.00.med
deleted file mode 100644 (file)
index c76b750..0000000
Binary files a/tests/test_3.00.med and /dev/null differ
diff --git a/tests/test_3.apad.02.bilan b/tests/test_3.apad.02.bilan
deleted file mode 100644 (file)
index c89aabd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-ANALYSE DU MAILLAGE
-===================
-
-     Maillage apres adaptation                         
-     MOYEU                                                                           
-     Date de creation : mardi 1 fevrier 2011 a 17 h 21 mn 12 s          
-     Dimension : 3
-     Degre : 1
-     C'est un maillage obtenu apres      2 adaptations.
-     Le niveau minimum actif est   :     2
-     Le niveau maximum atteint est :     2
-
-         Direction    |       Unite       |  Minimum   |  Maximum
-     ---------------------------------------------------------------
-     x                | m                 | -36.603    |  536.60    
-     y                | m                 | -75.000    |  125.00    
-     z                | m                 | -125.00    |  75.000    
-
-
-   NOMBRE D'ENTITES DU CALCUL
-   ==========================
-
-
-     ************************************************************
-     *                      Noeuds                              *
-     ************************************************************
-     * Nombre total                                *       3710 *
-     ************************************************************
-
-     ************************************************************
-     *                      Segments                            *
-     ************************************************************
-     * Nombre total                                *        156 *
-     * . dont aretes isolees                       *          0 *
-     * . dont aretes de bord de regions 2D         *          0 *
-     * . dont aretes internes aux faces/volumes    *        156 *
-     ************************************************************
-
-     ************************************************************
-     *                      Triangles                           *
-     ************************************************************
-     * Nombre total                                *       3232 *
-     * . dont triangles de regions 2D              *          0 *
-     * . dont triangles de bord                    *       3232 *
-     * . dont triangles internes aux volumes       *          0 *
-     ************************************************************
-     * . du niveau   0                             *          0 *
-     * . du niveau   1                             *          0 *
-     * . du niveau   2                             *       3232 *
-     ************************************************************
-
-     ************************************************************
-     *                      Tetraedres                          *
-     ************************************************************
-     * Nombre total                                *      17280 *
-     ************************************************************
-     * . du niveau   0                             *          0 *
-     * . du niveau   1                             *          0 *
-     * . du niveau   2                             *      17280 *
-     ************************************************************
diff --git a/tests/test_3.en.odt b/tests/test_3.en.odt
deleted file mode 100644 (file)
index 83d4bd2..0000000
Binary files a/tests/test_3.en.odt and /dev/null differ
diff --git a/tests/test_3.en.pdf b/tests/test_3.en.pdf
deleted file mode 100644 (file)
index 7b1f6e3..0000000
Binary files a/tests/test_3.en.pdf and /dev/null differ
diff --git a/tests/test_3.fr.med b/tests/test_3.fr.med
deleted file mode 100644 (file)
index 99b15ca..0000000
Binary files a/tests/test_3.fr.med and /dev/null differ
diff --git a/tests/test_3.odt b/tests/test_3.odt
deleted file mode 100644 (file)
index a3f0c93..0000000
Binary files a/tests/test_3.odt and /dev/null differ
diff --git a/tests/test_3.pdf b/tests/test_3.pdf
deleted file mode 100644 (file)
index c05d06f..0000000
Binary files a/tests/test_3.pdf and /dev/null differ
diff --git a/tests/test_3.png b/tests/test_3.png
deleted file mode 100644 (file)
index 19c94e8..0000000
Binary files a/tests/test_3.png and /dev/null differ
diff --git a/tests/test_3.py b/tests/test_3.py
deleted file mode 100644 (file)
index 5e7cdcc..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2012  CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
-Python script for HOMARD
-Copyright EDF-R&D 2011
-Test test_3
-"""
-__revision__ = "V1.3"
-
-######################################################################################
-Test_Name = "test_3"
-n_iter_test_file = 2
-######################################################################################
-import os
-import sys
-import tempfile
-import HOMARD
-import salome
-#
-pathHomard=os.getenv('HOMARD_ROOT_DIR')
-Rep_Test = os.path.join(pathHomard,"share/salome/resources/homard")
-Rep_Test_Resu = tempfile.mktemp()
-os.mkdir(Rep_Test_Resu)
-
-salome.salome_init()
-import iparameters
-ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
-ipar.append("AP_MODULES_LIST", "Homard")
-######################################################################################
-######################################################################################
-def homard_exec(theStudy):
-  """
-Python script for HOMARD
-Copyright EDF-R&D 2010
-  """
-  error = 0
-#
-  while not error :
-#
-    homard.SetCurrentStudy(theStudy)
-#
-# Creation of the boundaries
-# ==========================
-# Creation of the discrete boundary
-    Boundary_1 = homard.CreateBoundaryDi('courbes', 'COURBES', os.path.join(Rep_Test, Test_Name + '.fr.med'))
-#
-# Creation of the external cylinder
-    Boundary_2 = homard.CreateBoundaryCylinder('cyl_ext', 50.0, 25., -25., 1., 0., 0., 100.)
-#
-# Creation of the internal cylinder
-    Boundary_3 = homard.CreateBoundaryCylinder('cyl_int', 50.0, 25., -25., 1., 0., 0., 50.)
-#
-# Creation of the first sphere
-    Boundary_4 = homard.CreateBoundarySphere('sphere_1', 50.0, 25., -25., 100.)
-#
-# Creation of the second sphere
-    Boundary_5 = homard.CreateBoundarySphere('sphere_2', 450.0, 25., -25., 100.)
-#
-# Creation of the hypotheses
-# ==========================
-# Uniform refinement
-    Hypo = homard.CreateHypothesis('Hypo')
-    Hypo.SetAdapRefinUnRef(-1, 1, 0)
-#
-# Creation of the cases
-# =====================
-# Creation of the case Case_1
-    Case_1 = homard.CreateCase('Case_1', 'MOYEU', os.path.join(Rep_Test, Test_Name + '.00.med'))
-    Case_1.SetDirName(Rep_Test_Resu)
-    Case_1.SetConfType(1)
-    Case_1.AddBoundaryGroup('courbes', '')
-    Case_1.AddBoundaryGroup('cyl_ext', 'EXT')
-    Case_1.AddBoundaryGroup('cyl_int', 'INT')
-    Case_1.AddBoundaryGroup('sphere_1', 'END_1')
-    Case_1.AddBoundaryGroup('sphere_2', 'END_2')
-#
-# Creation of the iterations
-# ==========================
-# Creation of the iteration Iter_1
-    Iter_1 = homard.CreateIteration('Iter_1', Case_1.GetIter0Name() )
-    Iter_1.SetMeshName('MOYEU_1')
-    Iter_1.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.01.med'))
-    homard.AssociateIterHypo('Iter_1', 'Hypo')
-    error = Iter_1.Compute(1)
-    if error :
-      error = 1
-      break
-
-# Creation of the iteration Iter_2
-    Iter_2 = homard.CreateIteration('Iter_2', 'Iter_1')
-    Iter_2.SetMeshName('MOYEU_2')
-    Iter_2.SetMeshFile(os.path.join(Rep_Test_Resu, 'maill.02.med'))
-    homard.AssociateIterHypo('Iter_2', 'Hypo')
-    error = Iter_2.Compute(1)
-    if error :
-      error = 2
-      break
-#
-    break
-#
-  return error
-
-######################################################################################
-
-homard = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
-#
-# Exec of HOMARD-SALOME
-#
-try :
-  error_main = homard_exec(salome.myStudy)
-  if error_main :
-    raise Exception('Pb in homard_exec at iteration %d' %error_main )
-except :
-  if error_main :
-    raise Exception('Pb in homard_exec at iteration %d' %error_main )
-  sys.exit(1)
-#
-# Test of the result
-#
-s_iter_test_file = str(n_iter_test_file)
-test_file_suff = "apad.0" + s_iter_test_file + ".bilan"
-rep_test_file = "I0" + s_iter_test_file
-#
-test_file = os.path.join(Rep_Test, Test_Name + "." + test_file_suff)
-mess_error_ref = "\nReference file: " + test_file
-try :
-  file = open (test_file, "r")
-  mess_ref = file.readlines()
-  file.close()
-except :
-  mess_error = mess_error_ref + "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-#
-test_file = os.path.join(Rep_Test_Resu, rep_test_file, test_file_suff)
-if os.path.isfile (test_file) :
-   file = open (test_file, "r")
-   mess = file.readlines()
-   file.close()
-else :
-  mess_error  = "\nResult file: " + test_file
-  mess_error += "\nThis file does not exist.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-nblign = len(mess_ref)
-if ( len(mess) != nblign ):
-  mess_error = mess_error_ref +  "\nResult file: " + test_file
-  mess_error += "\nThe number of lines of the files are not the same.\n"
-  raise Exception(mess_error)
-  sys.exit(2)
-
-for num in range(nblign) :
-   if (( "creation" not in mess_ref[num] ) and ( mess_ref[num] != mess[num])) :
-       message_erreur = "\nRefe : " + mess_ref[num]
-       message_erreur += "Test : " + mess[num][:-1]
-       message_erreur += "\nThe test is different from the reference."
-       raise Exception(message_erreur)
-       sys.exit(10)
-#
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(1)
-  iparameters.getSession().restoreVisualState(1)
-