From 525d3ff8cacd19b013e7a91ad5d8f00ce802a0c7 Mon Sep 17 00:00:00 2001 From: crouzet Date: Mon, 4 Jul 2005 11:08:54 +0000 Subject: [PATCH] Initial version --- Makefile.in | 91 +++ README | 18 + adm_local/unix/config_files/README | 3 + adm_local/unix/make_commence.in | 249 +++++++++ adm_local/unix/make_omniorb.in | 56 ++ bin/VERSION | 2 + bin/runAppli.in | 8 + bin/runSalome.py | 506 +++++++++++++++++ build_configure | 207 +++++++ configure.in.base | 239 ++++++++ doc/Calculator_guide.sxw | Bin 0 -> 14119 bytes doc/calculator.pdf | Bin 0 -> 91843 bytes doc/snapshot1.png | Bin 0 -> 24135 bytes doc/snapshot2.png | Bin 0 -> 84282 bytes idl/CALCULATOR_Gen.idl | 83 +++ idl/Makefile.in | 63 +++ resources/.xvpics/ExecCALCULATOR.png | Bin 0 -> 549 bytes resources/CALCULATOR.png | Bin 0 -> 831 bytes resources/CALCULATORCatalog.xml | 246 +++++++++ resources/CALCULATOR_en.ps | 789 +++++++++++++++++++++++++++ resources/CALCULATOR_en.xml | 26 + resources/CALCULATOR_fr.xml | 23 + resources/ExecCALCULATOR.png | Bin 0 -> 831 bytes resources/config | 1 + src/CALCULATOR/CALCULATOR.cxx | 289 ++++++++++ src/CALCULATOR/CALCULATOR.hxx | 45 ++ src/CALCULATOR/CALCULATOR_TEST.py | 66 +++ src/CALCULATOR/Makefile.in | 37 ++ src/CALCULATOR/graphe1.py | 95 ++++ src/CALCULATOR/graphe1.xml | 195 +++++++ src/Makefile.in | 20 + 31 files changed, 3357 insertions(+) create mode 100644 Makefile.in create mode 100644 README create mode 100644 adm_local/unix/config_files/README create mode 100644 adm_local/unix/make_commence.in create mode 100644 adm_local/unix/make_omniorb.in create mode 100755 bin/VERSION create mode 100755 bin/runAppli.in create mode 100755 bin/runSalome.py create mode 100755 build_configure create mode 100644 configure.in.base create mode 100644 doc/Calculator_guide.sxw create mode 100644 doc/calculator.pdf create mode 100644 doc/snapshot1.png create mode 100644 doc/snapshot2.png create mode 100644 idl/CALCULATOR_Gen.idl create mode 100644 idl/Makefile.in create mode 100644 resources/.xvpics/ExecCALCULATOR.png create mode 100644 resources/CALCULATOR.png create mode 100644 resources/CALCULATORCatalog.xml create mode 100644 resources/CALCULATOR_en.ps create mode 100644 resources/CALCULATOR_en.xml create mode 100644 resources/CALCULATOR_fr.xml create mode 100644 resources/ExecCALCULATOR.png create mode 100644 resources/config create mode 100644 src/CALCULATOR/CALCULATOR.cxx create mode 100644 src/CALCULATOR/CALCULATOR.hxx create mode 100644 src/CALCULATOR/CALCULATOR_TEST.py create mode 100644 src/CALCULATOR/Makefile.in create mode 100644 src/CALCULATOR/graphe1.py create mode 100644 src/CALCULATOR/graphe1.xml create mode 100644 src/Makefile.in diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..6b08808 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,91 @@ +# -* Makefile *- +# +# Author : C. Caremoli +# Date : 10/10/2003 +# $Header$ +# + +# source path +top_srcdir=@top_srcdir@ +top_builddir=. +srcdir=@srcdir@ +VPATH=.:@srcdir@:@top_srcdir@/bin:@top_srcdir@/resources:./bin:@top_srcdir@/idl + +@COMMENCE@ + +SUBDIRS = idl src + +RESOURCES_FILES = CALCULATORCatalog.xml CALCULATOR.png CALCULATOR_en.xml \ + ExecCALCULATOR.png config + +BIN_SCRIPT= VERSION runAppli runSalome.py + +# copy header files in common directory +ifeq ($(HAVE_SSTREAM),yes) + include_list=include/salome/SALOMEconfig.h +else + include_list=include/salome/SALOMEconfig.h include/salome/sstream +endif + +inc: idl $(include_list) + +include/salome/SALOMEconfig.h: salome_adm/unix/SALOMEconfig.ref + -$(RM) $@ + $(LN_S) ../../$< $@ + +# test if SALOMEconfig.h has changed (contents) +salome_adm/unix/SALOMEconfig.ref: salome_adm/unix/SALOMEconfig.h + @if ! [ -a $@ ]; then \ + cp -p $< $@; \ + fi; \ + if ! cmp $< $@; then \ + cp -p $< $@; \ + fi; \ + +include/salome/sstream: salome_adm/unix/sstream + -$(RM) $@ + $(LN_S) ../../$< $@ + +depend: depend_idl + +depend_idl: + (cd idl ; $(MAKE) $@) || exit 1 + +# doc is already build : if you want to had documents, go manually to doc and run 'make doc' +#doc: +# (cd doc && $(MAKE) $@) || exit 1 + +install-end: +# finish libtool install +# @$(LT) --mode=finish $(libdir) + +install-include: $(include_list) + $(INSTALL) -d $(includedir) + @for f in X $(include_list); do \ + if test $$f != X; then \ + ($(INSTALL_DATA) $$f $(includedir)/. || exit 1); \ + fi; \ + done + +# install script in $(bindir) : +install-bin: $(BIN_SCRIPT) + $(INSTALL) -d $(bindir) + $(INSTALL_PROGRAM) $^ $(bindir) + +uninstall: uninstall-idl + +uninstall-idl: + $(RM) $(idldir)/*.idl + +distclean: distclean-other + +distclean-other: + -$(RM) salome_adm/unix/*~ salome_adm/unix/*% salome_adm/unix/*.bak salome_adm/unix/*.new salome_adm/unix/*.old + -$(RM) salome_adm/unix/make_* + -$(RM) salome_adm/unix/depend salome_adm/unix/SALOMEconfig.h + -$(RM) config.cache config.log config.status + +@MODULE@ + +install: install-bin install-include install-end + diff --git a/README b/README new file mode 100644 index 0000000..14cc271 --- /dev/null +++ b/README @@ -0,0 +1,18 @@ +This module is a Salome example of a module that is interfaced with MED library. + +Installation and compilation is like every Salome modules : + src_dir/build_configure + mkdir build_dir + mkdir instal_dir + cd build_dir + src_dir/configure --prefix=instal_dir + make + make install + +To check Calculator component, you can use CALCULATOR_TEST.py script, +or SUPERVISION graph src_dir/CALCULATOR/graphe1.py + + +Documentation can be found in /doc directory. It was written in sxw format (openoffice) and was converted in pdf. + +Implementation is in /src/CALCULATOR directory. It was tested on redhat8 - using gcc 3.2 diff --git a/adm_local/unix/config_files/README b/adm_local/unix/config_files/README new file mode 100644 index 0000000..feb997b --- /dev/null +++ b/adm_local/unix/config_files/README @@ -0,0 +1,3 @@ +This file is only here for CVS: +CVS does not always create empty directory, and adm_local/unix/config_file +is needed by build_configure. diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in new file mode 100644 index 0000000..f6d5ea9 --- /dev/null +++ b/adm_local/unix/make_commence.in @@ -0,0 +1,249 @@ +# common directories to put headerfiles +inc_builddir=$(top_builddir)/include/salome + +@SET_MAKE@ +SHELL=/bin/sh + +# header missing + +HAVE_SSTREAM=@HAVE_SSTREAM@ + + +LIBS=@LIBS@ +LDFLAGS=@LDFLAGS@ -L$(top_builddir)/lib/salome -Xlinker -rpath-link -Xlinker -L$(top_builddir)/lib/salome +# add libstdc++ to link c++ library with libtool ! +LDFLAGS+= -lstdc++ + +CP=@CP@ + +# CPP + +CPP=@CPP@ +CXXCPP=@CXXCPP@ +CPPFLAGS=@CPPFLAGS@ -I$(inc_builddir) -I$(srcdir) -I. + +# C + +CC = @CC@ +CFLAGS = @CFLAGS@ +C_DEPEND_FLAG = @C_DEPEND_FLAG@ + +# C++ + +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@ + +# JAVA + +JAVA_INCLUDES = @JAVA_INCLUDES@ +JAVA_LIBS = @JAVA_LIBS@ +JAVA_LDPATH = @JAVA_LDPATH@ + +# PYTHON + +PYTHON = @PYTHON@ +PYTHONHOME = @PYTHONHOME@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_VERSION = @PYTHON_VERSION@ +PYTHON_SITE = @PYTHON_SITE@ +PYTHON_SITE_INSTALL = @PYTHON_SITE_INSTALL@ + +# QT + +QT_ROOT = @QT_ROOT@ +QT_INCLUDES = @QT_INCLUDES@ +QT_MT_INCLUDES = @QT_INCLUDES@ -DQT_THREAD_SUPPORT +QT_LIBS = @QT_LIBS@ +QT_MT_LIBS = @QT_MT_LIBS@ + +MOC = @MOC@ +UIC = @UIC@ + + +#QWT + +QWT_INCLUDES=@QWT_INCLUDES@ +QWT_LIBS=@QWT_LIBS@ + +# SIP +SIP = @SIP@ +SIP_INCLUDES = @SIP_INCLUDES@ +SIP_LIBS = @SIP_LIBS@ + +# PYQT +PYQT_SIPS = @PYQT_SIPS@ +PYQT_LIBS = @PYQT_LIBS@ + +# openGL +OGL_INCLUDES=@OGL_INCLUDES@ +OGL_LIBS=@OGL_LIBS@ + +# VTK +VTK_INCLUDES=@VTK_INCLUDES@ +VTK_LIBS=@VTK_LIBS@ + +# HDF5 + +HDF5_INCLUDES=@HDF5_INCLUDES@ +HDF5_LIBS=@HDF5_LIBS@ +HDF5_MT_LIBS=@HDF5_MT_LIBS@ + +# MED2 + +MED2_INCLUDES=@MED2_INCLUDES@ +MED2_LIBS=@MED2_LIBS@ +MED2_MT_LIBS=@MED2_MT_LIBS@ + +# OpenCasCade + +OCC_INCLUDES=@CAS_CPPFLAGS@ +OCC_CXXFLAGS=@CAS_CXXFLAGS@ + +OCC_KERNEL_LIBS=@CAS_KERNEL@ +OCC_OCAF_LIBS=@CAS_OCAF@ +OCC_VIEWER_LIBS=@CAS_VIEWER@ +OCC_MODELER_LIBS=@CAS_MODELER@ +OCC_DATAEXCHANGE_LIBS=@CAS_DATAEXCHANGE@ +OCC_LIBS=@CAS_LDFLAGS@ + +# MPICH + +MPICH_INCLUDES=@MPICH_INCLUDES@ +MPICH_LIBS=@MPICH_LIBS@ + +# Swig C++ Python + +SWIG = @SWIG@ +SWIG_FLAGS = @SWIG_FLAGS@ -I$(inc_builddir) -I$(srcdir) -I. + +# OMNIORB + +OMNIORB_ROOT = @OMNIORB_ROOT@ +OMNIORB_INCLUDES = @OMNIORB_INCLUDES@ +OMNIORB_LIBS = @OMNIORB_LIBS@ +OMNIORB_CXXFLAGS = @OMNIORB_CXXFLAGS@ + +OMNIORB_IDL = @OMNIORB_IDL@ +OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@ +OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome + +OMNIORB_IDL_CLN_H = @OMNIORB_IDL_CLN_H@ +OMNIORB_IDL_CLN_CXX = @OMNIORB_IDL_CLN_CXX@ +OMNIORB_IDL_CLN_OBJ = @OMNIORB_IDL_CLN_OBJ@ + +OMNIORB_IDL_SRV_H = @OMNIORB_IDL_SRV_H@ +OMNIORB_IDL_SRV_CXX = @OMNIORB_IDL_SRV_CXX@ +OMNIORB_IDL_SRV_OBJ = @OMNIORB_IDL_SRV_OBJ@ + +# Default ORB + +CORBA_ROOT = @CORBA_ROOT@ +CORBA_INCLUDES = @CORBA_INCLUDES@ +CORBA_LIBS = @CORBA_LIBS@ +CORBA_CXXFLAGS = @CORBA_CXXFLAGS@ + +IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome +IDLPYFLAGS = @IDLPYFLAGS@ + +IDL = @IDL@ + +IDL_CLN_H = @IDL_CLN_H@ +IDL_CLN_CXX = @IDL_CLN_CXX@ +IDL_CLN_OBJ = @IDL_CLN_OBJ@ + +IDL_SRV_H = @IDL_SRV_H@ +IDL_SRV_CXX = @IDL_SRV_CXX@ +IDL_SRV_OBJ = @IDL_SRV_OBJ@ + +CPPFLAGS+= $(CORBA_INCLUDES) +CXXFLAGS+= $(CORBA_CXXFLAGS) + +# add corba libs when link salome application ! +#LDFLAGS+= $(CORBA_LIBS) +LIBS+=$(CORBA_LIBS) + +## Shared libraries +LT_STATIC_EXEC=@LT_STATIC_EXEC@ +DYNAMIC_DIRS=@DYNAMIC_DIRS@ +LT_LIB=libtool +LT=$(top_builddir)/libtool +LT_COMPILE=$(LT) --mode=compile $(CC) +LT_LINK_LIB=$(LT_LIB) --mode=link $(CC) -rpath $(libdir) +LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS) +LT_RUN=$(LT) --mode=execute +LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM) +LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA) +LT_UNINSTALL=$(LT) --mode=uninstall $(RM) + +INSTALL=@INSTALL@ +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +INSTALL_DATA=@INSTALL_DATA@ + +# create a symbolic link (or a copie ?) +LN_S=@LN_S@ + +## Installation points +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@/salome +libdir=@libdir@/salome +# warning : if user give this path in configure we could have salome/salome :-( +includedir=@includedir@/salome +datadir=@datadir@/salome +idldir=$(prefix)/idl/salome +sharedpydir=@libdir@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules + +docdir=$(datadir)/doc + +# +# begin of package rules +# + +.PHONY: all lib bin inc resources tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean + +.SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm + +all: + $(MAKE) inc + $(MAKE) depend_idl + $(MAKE) depend + $(MAKE) lib + $(MAKE) bin + $(MAKE) resources + +# +# add target to build administrative files +# + +Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in + cd $(top_builddir) ; ./config.status + +$(top_builddir)/config.status: $(top_srcdir)/configure + cd $(top_builddir) ; ./config.status --recheck + +# VPATH contain $(srcdir), so make configure is good in top_srcdir and we must add target configure otherwise :-) +ifneq ($(top_srcdir),$(srcdir)) +configure: $(top_srcdir)/configure +endif + +$(top_srcdir)/configure: $(top_srcdir)/configure.in $(top_srcdir)/aclocal.m4 + cd $(top_srcdir) ; autoconf + +$(top_srcdir)/configure.in: $(top_srcdir)/configure.in.base + cd $(top_srcdir) && ./build_configure + + +ACLOCAL_SRC = \ +ac_cxx_bool.m4 check_corba.m4 check_vtk.m4 \ +ac_cxx_depend_flag.m4 check_hdf5.m4 enable_pthreads.m4 \ +ac_cxx_mutable.m4 check_mico.m4 libtool.m4 \ +ac_cxx_namespaces.m4 check_omniorb.m4 pyembed.m4 \ +ac_cxx_partial_specialization.m4 check_opengl.m4 python.m4 \ +ac_cxx_typename.m4 check_pthreads.m4 check_cas.m4 \ +ac_cc_warnings.m4 check_qt.m4 check_med2.m4 \ +check_swig.m4 + +$(top_srcdir)/aclocal.m4: $(ACLOCAL_SRC:%=@KERNEL_ROOT_DIR@/salome_adm/unix/config_files/%) + cd $(top_srcdir) ; aclocal --acdir=adm_local/unix/config_files -I @KERNEL_ROOT_DIR@/salome_adm/unix/config_files diff --git a/adm_local/unix/make_omniorb.in b/adm_local/unix/make_omniorb.in new file mode 100644 index 0000000..8e82576 --- /dev/null +++ b/adm_local/unix/make_omniorb.in @@ -0,0 +1,56 @@ +#======================================================================= +# Begin specific part to omniorb +# (include from file adm/unix/make_omniorb generated by +# adm/unix/make_omniorb.in) +#======================================================================= +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 29/06/2001 +# $Header$ +# + +# Client and server object are the same with omniorb +# There are one header file and one source file generate + +#IDLOBJ=$(IDLSRC:%.idl=%$(IDL_CLN_OBJ)) + +# dependancies between idl and it's generated files +%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${KERNEL_ROOT_DIR}/idl/salome/%.idl + $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< + +%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${MED_ROOT_DIR}/idl/salome/%.idl + $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< + +%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${top_srcdir}/idl/%.idl + $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< + +# dependncies between idl files +depend_idl: .depidl + +# we use cpp to generate dependencies between idl files. +# we change cpp output to keep only idl file and transform it to get a suitable rule +.depidl: $(IDL_FILES) + @touch $@ + @for dep in $? dummy; do \ + if [ $$dep != "dummy" ]; then \ + echo Building dependencies for $$dep; \ + basedep=`basename $$dep .idl`; \ + header="$$basedep"$(IDL_CLN_H); \ + sed '\%^'"$$header"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@; \ + $(CPP) $(C_DEPEND_FLAG) -I$(srcdir) $$dep 2>/dev/null | \ + sed `echo "s%$$basedep\\.idl%$$header:%g"` | \ + sed 's% $(srcdir)/% %g' | \ + sed 's% $(top_srcdir)/% %g' | \ + sed 's% $(top_builddir)/% %g' | \ + sed 's%^.*:\.o: *%%' | sed 's%^ *\\ *%%'| sed 's%^ *\(.*\):%\1:%' | \ + sed 's/\.idl/$(IDL_CLN_H)/' >>$@; \ + echo '' >>$@; \ + fi; \ + done ; + +-include .depidl + +#======================================================================= +# End specific part to omniorb +#======================================================================= diff --git a/bin/VERSION b/bin/VERSION new file mode 100755 index 0000000..74565ba --- /dev/null +++ b/bin/VERSION @@ -0,0 +1,2 @@ +SALOME 2 EXEMPLE MODULE C++ : CALCULATOR +This module works with KERNEL 2.2.4 diff --git a/bin/runAppli.in b/bin/runAppli.in new file mode 100755 index 0000000..6408462 --- /dev/null +++ b/bin/runAppli.in @@ -0,0 +1,8 @@ +#!/bin/sh + +export KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@ +export PYCALCULATOR_ROOT_DIR=@prefix@ + +python -i $CALCULATOR_ROOT_DIR/bin/salome/runSalome.py --modules=CALCULATOR --xterm --containers=cpp,python --killall + + diff --git a/bin/runSalome.py b/bin/runSalome.py new file mode 100755 index 0000000..43ccb50 --- /dev/null +++ b/bin/runSalome.py @@ -0,0 +1,506 @@ +#!/usr/bin/env python + +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 _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 CALCULATOR component + usage : hello=test(clt) + """ + # create an LifeCycleCORBA instance + import LifeCycleCORBA + lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb) + import CALCULATOR_ORB + hello = lcc.FindOrLoadComponent("FactoryServer", "CALCULATOR") + return hello + +# ----------------------------------------------------------------------------- +# +# 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 new file mode 100755 index 0000000..573a23b --- /dev/null +++ b/build_configure @@ -0,0 +1,207 @@ +#!/bin/bash + +# +# Tool for updating list of .in file for the SALOME project +# and regenerating configure script +# +# Author : Marc Tajchman - CEA +# Date : 10/10/2002 +# $Header $ +# + +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 + +######################################################################## +# find_in - utility function +# +# usage : +# find_in directory filename +# +# Finds files following the *.in pattern, recursively in the +# directory (first argument). +# Results are appended into the file (second argument) +# +# Difference from the standard unix find is that files are tested +# before directories +# + +find_in() +{ + local i + local f=$2 + +# if the first argument is not a directory, returns + + if [ ! -d "$1" ] ; then + return + fi + +# dont look in the CVS directories + + case $1 in + */CVS) return ;; + *) ;; + esac + +# for each regular file contained in the directory +# test if it's a .in file + + for i in "$1"/* + do + if [ -f "$i" ] ; then + case $i in + *.in) echo $i" \\" >> $f;; + *) ;; + esac + fi + done + +# for each subdirectory of the first argument, proceeds recursively + + for i in "$1"/* + do + if [ -d "$i" ] ; then + find_in "$i" "$f" + fi + done +} + + +####################################################################### +# Generate list of .in files (Makefile.in, config.h.in, etc) +# appending it in file configure.in + +cd ${CONF_DIR} +ABS_CONF_DIR=`pwd` + +# +# Common part of the configure.in file +# +chmod u+w configure.in.base +if ! \cp -f configure.in.base configure.in_tmp1 +then + echo + echo "error : can't create files in" ${CONF_DIR} + echo "aborting ..." + chmod u-w configure.in.base + exit +fi +chmod u-w configure.in.base + +if [ -e "${CONF_DIR}/salome_adm" ] ; then + \rm -f ${CONF_DIR}/salome_adm +fi + +# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in files +echo "" >> configure.in_tmp1 +echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}' >> configure.in_tmp1 + +echo "" >> configure.in_tmp1 +echo "AC_OUTPUT([ \\" >> configure.in_tmp1 + +# +# List of .in files in the adm/unix directory +# These files MUST be on top of AC_OUTPUT list so we +# put them "manually" +# + +echo "./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1 +echo "./salome_adm/unix/F77config.h \\" >> configure.in_tmp1 +echo "./salome_adm/unix/sstream \\" >> configure.in_tmp1 +echo "./salome_adm/unix/depend \\" >> configure.in_tmp1 +echo "./adm_local/unix/make_omniorb \\" >> configure.in_tmp1 +echo "./salome_adm/unix/envScript \\" >> configure.in_tmp1 +echo "./adm_local/unix/make_commence \\" >> configure.in_tmp1 +echo "./salome_adm/unix/make_conclude \\" >> configure.in_tmp1 +echo "./salome_adm/unix/make_module \\" >> configure.in_tmp1 + +\rm -f configure.in_tmp2 +touch configure.in_tmp2 +find_in . configure.in_tmp2 + +sed -e '/^.\/salome_adm/d' \ + -e '/configure.in/d' \ + -e '/^.\/adm_local/d' \ + -e 's/.in / /' \ + configure.in_tmp2 >> configure.in_tmp1 + +echo "])" >> configure.in_tmp1 + +# delete the link created for AC_OUTPUT +echo "" >> configure.in_tmp1 +\mv configure.in_tmp1 configure.in_new +\rm -f configure.in_tmp2 + + +######################################################################## +# Create new (or replace old) configure.in file +# Print a message if the file is write protected +# + +echo +if test ! -f configure.in +then + echo -n "Creating new file 'configure.in' ... " + if \mv configure.in_new configure.in >& /dev/null + then + echo "done" + else + echo "error, check your file permissions" + fi +else + echo -n "Updating 'configure.in' file ... " + if ! \cp configure.in configure.in_old >& /dev/null + then + echo + echo + echo "Can't backup previous configure.in" + echo -n "Continue (you will not be able to revert) - (Y/N) ? " + read R + case "x$R" in + xn*) exit;; + xN*) exit;; + esac + echo + echo -n " " + fi + if \cp configure.in_new configure.in >& /dev/null + then + \rm -f configure.in_new + echo "done" + else + echo + echo "error, can't update previous configure.in" + fi +fi + +######################################################################## +# Use autoconf to rebuild the configure script +# + +if test -f configure +then + echo -n "Updating 'configure' script ... " +else + echo -n "Creating 'configure' script ... " +fi + +aclocal --acdir=adm_local/unix/config_files -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files +if autoconf +then + echo "done" +else + echo "failed (check file permissions and/or user quotas ...)" +fi + +cd ${ORIG_DIR} + +echo diff --git a/configure.in.base b/configure.in.base new file mode 100644 index 0000000..c37cd18 --- /dev/null +++ b/configure.in.base @@ -0,0 +1,239 @@ +# +# PLEASE DO NOT MODIFY configure.in FILE +# +# ALL CHANGES WILL BE DISCARDED BY THE NEXT +# build_configure COMMAND +# +# CHANGES MUST BE MADE IN configure.in.base FILE +# +# +# Author : Marc Tajchman (CEA) +# Date : 28/06/2001 +# Modified by : Patrick GOLDBRONN (CEA) +# Modified by : Marc Tajchman (CEA) +# +# Created from configure.in.base +# + +AC_INIT(src) +AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) +AC_CANONICAL_HOST + +PACKAGE=salome +AC_SUBST(PACKAGE) + +VERSION=1.2.1 +AC_SUBST(VERSION) + +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 + for shared libraries + +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='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh + ;; +esac + +AC_CXX_HAVE_SSTREAM + + +echo +echo --------------------------------------------- +echo testing python +echo --------------------------------------------- +echo + +CHECK_PYTHON + +echo +echo --------------------------------------------- +echo testing QT +echo --------------------------------------------- +echo + +CHECK_QT + +echo +echo --------------------------------------------- +echo Testing OpenCascade +echo --------------------------------------------- +echo + +CHECK_CAS + +echo +echo --------------------------------------------- +echo testing omniORB +echo --------------------------------------------- +echo + +echo +echo --------------------------------------------- +echo testing HDF5 +echo --------------------------------------------- +echo + +CHECK_HDF5 + +echo +echo --------------------------------------------- +echo testing MED2 +echo --------------------------------------------- +echo + +CHECK_MED2 + + +CHECK_OMNIORB + +echo +echo --------------------------------------------- +echo default ORB : omniORB +echo --------------------------------------------- +echo + +DEFAULT_ORB=omniORB +CHECK_CORBA + +AC_SUBST_FILE(CORBA) +corba=make_$ORB +CORBA=adm_local/unix/$corba + +echo +echo --------------------------------------------- +echo Testing Kernel +echo --------------------------------------------- +echo + +CHECK_KERNEL + +echo +echo --------------------------------------------- +echo Summary +echo --------------------------------------------- +echo + +echo Configure +variables="python_ok omniORB_ok Kernel_ok qt_ok" + +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 generals files which could be included in every makefile + +AC_SUBST_FILE(COMMENCE) COMMENCE=adm_local/unix/make_commence +AC_SUBST_FILE(CONCLUDE) CONCLUDE=salome_adm/unix/make_conclude +AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module + +dnl les dependences +AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend + +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 + +# make other build directories +for rep in salome_adm adm_local doc bin/salome include/salome lib/salome share/salome/resources share/salome/doc idl +do + $INSTALL -d $rep +done + +echo +echo --------------------------------------------- +echo copying resource files, shell scripts, and +echo xml files +echo --------------------------------------------- +echo + +dnl copy shells and utilities contained in the bin directory +dnl excluding .in files (treated in AC-OUTPUT below) and CVS +dnl directory + +cd bin +for i in $ROOT_SRCDIR/bin/* +do + local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` + case "$local_bin" in + *.in | *~) ;; + ./bin/CVS) ;; + *) ln -fs $i; echo $local_bin ;; + esac +done +cd $ROOT_BUILDDIR + +AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript + +echo +echo --------------------------------------------- +echo generating Makefiles and configure files +echo --------------------------------------------- +echo + +AC_OUTPUT_COMMANDS([ \ + chmod +x ./bin/* \ +]) + +## do not delete this line diff --git a/doc/Calculator_guide.sxw b/doc/Calculator_guide.sxw new file mode 100644 index 0000000000000000000000000000000000000000..ca479c475b934bf12ab47539f864d2ae268973fa GIT binary patch literal 14119 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 UQjk!;U{G%#-M5I>v;6A)Kk1dPW&i*H literal 0 HcmV?d00001 diff --git a/doc/calculator.pdf b/doc/calculator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3af94d09ffd86a6f5df0af8ef987ac017ee094d8 GIT binary patch literal 91843 zcma&NQ;;ZKv##5=ZQHipJ=?Zz+qP{Rvu)e9ZQJMj|JZAvi|<67bx~0jd}fxynt5{ie1UfRUg%-NiP{ht*@dNB)YXA?&PdNFGQ zXA=<!LwY<8q=Gat|$8kOSvEqY(2rkC2v;t4WU6}&

`3B}5y$wC>#^j!vV1?ONiiJn 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 literal 0 HcmV?d00001 diff --git a/doc/snapshot2.png b/doc/snapshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..3edafe90f555b2acfa6723aff421a984b4b6083b GIT binary patch literal 84282 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�Z>;vLKvx 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 literal 0 HcmV?d00001 diff --git a/idl/CALCULATOR_Gen.idl b/idl/CALCULATOR_Gen.idl new file mode 100644 index 0000000..6cc3087 --- /dev/null +++ b/idl/CALCULATOR_Gen.idl @@ -0,0 +1,83 @@ +#ifndef __CALCULATOR_GEN__ +#define __CALCULATOR_GEN__ +/*! + \defgroup EXAMPLES SALOME EXAMPLES components + */ + +#include "SALOME_Component.idl" +#include "SALOME_Exception.idl" +#include "MED.idl" + + +/*! \ingroup EXAMPLES + +This package contains the interface CALCULATOR_ORB used +for %CALCULATOR component as an example in %SALOME application. +*/ +module CALCULATOR_ORB +{ + /*! \brief Interface of the %CALCULATOR component + */ + interface CALCULATOR_Gen : Engines::Component + { + /*! + Calculate the maximum relative difference of field with the previous one. + At first call, store passed field and return 1. + */ + double convergenceCriteria(in SALOME_MED::FIELDDOUBLE field); + /*! + Apply to each (scalar) field component the linear function x -> ax+b. + Release field1 after use. + */ + SALOME_MED::FIELDDOUBLE applyLin(in SALOME_MED::FIELDDOUBLE field1, in double a1, in double a2); + + /*! + Addition of fields. + Return exception if fields are not compatible. + Release field1 and field2 after use. + */ + SALOME_MED::FIELDDOUBLE add(in SALOME_MED::FIELDDOUBLE field1, in SALOME_MED::FIELDDOUBLE field2) + raises (SALOME::SALOME_Exception); + + /*! + return euclidian norm of field + Release field after use. + */ + double norm2(in SALOME_MED::FIELDDOUBLE field); + + /*! + return L2 norm of field + Release field after use. + */ + double normL2(in SALOME_MED::FIELDDOUBLE field); + + /*! + return L1 norm of field + Release field after use. + */ + double normL1(in SALOME_MED::FIELDDOUBLE field); + + /*! + return max norm of field + Release field after use. + */ + double normMax(in SALOME_MED::FIELDDOUBLE field); + + /*! + This utility method print in standard output the coordinates & field values + Release field after use. + */ + void printField(in SALOME_MED::FIELDDOUBLE field); + + /*! + This method clones field in four examples. + Release field after use. + */ + void cloneField(in SALOME_MED::FIELDDOUBLE field, out SALOME_MED::FIELDDOUBLE clone1, + out SALOME_MED::FIELDDOUBLE clone2, out SALOME_MED::FIELDDOUBLE clone3, + out SALOME_MED::FIELDDOUBLE clone4 ); + }; +}; + +#endif + diff --git a/idl/Makefile.in b/idl/Makefile.in new file mode 100644 index 0000000..444fd60 --- /dev/null +++ b/idl/Makefile.in @@ -0,0 +1,63 @@ +# +# generate dependencies for idl file : +# + +# source path +top_srcdir=@top_srcdir@ +top_builddir=.. +srcdir=@srcdir@ +VPATH=.:$(srcdir):${KERNEL_ROOT_DIR}/idl/salome:${MED_ROOT_DIR}/idl/salome + +@COMMENCE@ + +IDL_FILES = CALCULATOR_Gen.idl + +PY_CLIENT_IDL = $(IDL_FILES) + +# we copy all idl file in $(top_builddir)/idl +inc: $(IDL_FILES:%=$(top_builddir)/idl/%) + +$(IDL_FILES:%=$(top_builddir)/idl/%):$(top_builddir)/idl/%:% + #$(CP) $< $@ + cp -f $< $@ + +lib: pyidl + +PYTHON_BUILD_SITE=$(top_builddir)/lib/python$(PYTHON_VERSION)/site-packages/@PACKAGE@ + +pyidl: $(PYTHON_BUILD_SITE) $(IDL_FILES:%.idl=$(PYTHON_BUILD_SITE)/%_idl.py) + +$(PYTHON_BUILD_SITE): + $(INSTALL) -d $@ + +$(PYTHON_BUILD_SITE)/%_idl.py: %.idl + $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_BUILD_SITE) $< + +# install python client (generated from idl file +install: install-pyidl install-idl + +# create directory $(idldir) and copy idl files into it +install-idl: $(IDL_FILES) + $(INSTALL) -d $(idldir) + cp -p $^ $(idldir) + +OMNIORB_IDLCXXFLAGS+=-I${MED_ROOT_DIR}/idl/salome +OMNIORB_IDLPYFLAGS+=-I${MED_ROOT_DIR}/idl/salome + +install-pyidl: $(IDL_FILES) + $(INSTALL) -d $(PYTHON_SITE_INSTALL) + @for file in $^ dummy; do \ + if [ $$file != "dummy" ]; then \ + $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_SITE_INSTALL) $$file ; \ + fi ; \ + done ; + + +cleandep: + -$(RM) .dep* + +distclean: + -$(RM) *.py + -$(RM) $(IDL_FILES:%=$(top_builddir)/idl/%) + -$(RM) Makefile + diff --git a/resources/.xvpics/ExecCALCULATOR.png b/resources/.xvpics/ExecCALCULATOR.png new file mode 100644 index 0000000000000000000000000000000000000000..be0eb890b6ac7397696497c50ef1caad305b4689 GIT binary patch literal 549 zcmYjOK~BRk5L~W#MWi|s97$AxI09|GholI&S3=_0T;KrDsCi4*fARjMX4XxiN|ea6 zvpeJ2r<=O#+G@uAiihR;u5G{CwtimS*O#~5b^Z4J`TlWL%@)JsX1&}ztowd3yuMW6 z*gKzB?3h(V*f;i1jps(?A0<+Wf}%e|DGT6w$7s z!Hg^;X+aH6hQ?jt z!Y}3M$+V#p%y3DP6skm9q@(sNx0sS_Aa7B@L5hF7aMp3!lsP+Az+%skjlTGu_}HXv IG)d!s0d?>M(EtDd literal 0 HcmV?d00001 diff --git a/resources/CALCULATOR.png b/resources/CALCULATOR.png new file mode 100644 index 0000000000000000000000000000000000000000..16a20c116e8243a6b49ed862613d2cc49bdf4caa GIT binary patch literal 831 zcmV-F1Hk-=P)A+3!%gdoE?w?yY*XMamxaAW~()k6;QGVVf3ZPpQcy+38CrH3{Qk zoaxN-vWJ+OcH(Y#5qvHK|CitMf1CdUU;7AQ8zF4-#i736F~#EMso~pq*Ek7JMLa$}POH_T(b)M|f)>8t;^3f3 zKA)#ntMKyW+7Z-s>l6xWsZ53jrMAEC5{41RXe`Snj$`6DMr+Vop|xgsc$hE@Sz20V zb@eG)%b|Y+_m{*NND_%L1}POFH@MUObOdhQq^%&CMdWZvC2q+x@_Pg_JQ$DGG%bJbwIyVzG#2o#E=$@5yGf z#Bm5%IplY1BB@I((}Bdlpj1;;nAaqNZEDBWHP2)F0;K|LMcrchIBe@ z&Ye4p5H>e&{)pCc=qTd1Z_6|q4IIZIpUy{Fg7-dG2KQ=nb2l+s9 + + + + + + CALCULATOR + CALCULATOR + MED EXAMPLE + crouzet + 2.2.2 + unknown + 1 + CALCULATOR.png + 'linux' ~ OS + + CALCULATOR_Gen + unknown + + + convergenceCriteria + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + return + double + unknown + + + + + + applyLin + crouzet + 2.2.2 + unknown + 0 + + + field1 + FIELDDOUBLE + unknown + + + a1 + double + unknown + + + a2 + double + unknown + + + + + return + FIELDDOUBLE + unknown + + + + + + add + crouzet + 2.2.2 + unknown + 0 + + + field1 + FIELDDOUBLE + unknown + + + field2 + FIELDDOUBLE + unknown + + + + + return + FIELDDOUBLE + unknown + + + + + + norm2 + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + return + double + unknown + + + + + + normL2 + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + return + double + unknown + + + + + + normL1 + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + return + double + unknown + + + + + + normMax + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + return + double + unknown + + + + + + printField + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + + + cloneField + crouzet + 2.2.2 + unknown + 0 + + + field + FIELDDOUBLE + unknown + + + + + clone1 + FIELDDOUBLE + unknown + + + clone2 + FIELDDOUBLE + unknown + + + clone3 + FIELDDOUBLE + unknown + + + clone4 + FIELDDOUBLE + unknown + + + + + + + + + diff --git a/resources/CALCULATOR_en.ps b/resources/CALCULATOR_en.ps new file mode 100644 index 0000000..f1e9d18 --- /dev/null +++ b/resources/CALCULATOR_en.ps @@ -0,0 +1,789 @@ +%!PS-Adobe-3.0 +%%Title: PYCALCULATOR_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 +% -> +/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 ( # -) +/# { + 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. +% 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 +() p n +() N +() N +() N +() N +() N +( ) N +( ) N +( ) N +() N +() N +() N +( ) N +() N +() N +() N +() N +(PYCALCULATOR_en.xml) (Page 1/1) (Oct 14, 03 10:41) title +border +grestore +(Printed by Nicolas CROUZET - SFME/LGLS) rhead +(PYCALCULATOR_en.xml) (1/1) (Tuesday November 04, 2003) footer +end % of iso1dict +pagesave restore +showpage + +%%Trailer +end +%%EOF diff --git a/resources/CALCULATOR_en.xml b/resources/CALCULATOR_en.xml new file mode 100644 index 0000000..16006ed --- /dev/null +++ b/resources/CALCULATOR_en.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/CALCULATOR_fr.xml b/resources/CALCULATOR_fr.xml new file mode 100644 index 0000000..165a833 --- /dev/null +++ b/resources/CALCULATOR_fr.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/ExecCALCULATOR.png b/resources/ExecCALCULATOR.png new file mode 100644 index 0000000000000000000000000000000000000000..16a20c116e8243a6b49ed862613d2cc49bdf4caa GIT binary patch literal 831 zcmV-F1Hk-=P)A+3!%gdoE?w?yY*XMamxaAW~()k6;QGVVf3ZPpQcy+38CrH3{Qk zoaxN-vWJ+OcH(Y#5qvHK|CitMf1CdUU;7AQ8zF4-#i736F~#EMso~pq*Ek7JMLa$}POH_T(b)M|f)>8t;^3f3 zKA)#ntMKyW+7Z-s>l6xWsZ53jrMAEC5{41RXe`Snj$`6DMr+Vop|xgsc$hE@Sz20V zb@eG)%b|Y+_m{*NND_%L1}POFH@MUObOdhQq^%&CMdWZvC2q+x@_Pg_JQ$DGG%bJbwIyVzG#2o#E=$@5yGf z#Bm5%IplY1BB@I((}Bdlpj1;;nAaqNZEDBWHP2)F0;K|LMcrchIBe@ z&Ye4p5H>e&{)pCc=qTd1Z_6|q4IIZIpUy{Fg7-dG2KQ=nb2l+s9 +#include +using namespace std; +#include "MEDMEM_Mesh_i.hxx" +#include "MEDMEM_Support_i.hxx" +#include "MEDMEM_FieldDouble_i.hxx" +#include +#include +using namespace MEDMEM; + +CALCULATOR::CALCULATOR(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) : + Engines_Component_i(orb, poa, contId, instanceName, interfaceName,true) +{ + MESSAGE("activate object"); + _thisObj = this ; + _id = _poa->activate_object(_thisObj); +} + +CALCULATOR::~CALCULATOR() +{ +} + +CORBA::Double CALCULATOR::norm2(SALOME_MED::FIELDDOUBLE_ptr field1) +{ + beginService( "CALCULATOR::norm2"); + BEGIN_OF("CALCULATOR::Norm2(SALOME_MED::FIELDDOUBLE_ptr field1)"); + // Create a local field from corba field, apply method normMax on it. + // When exiting the function, f1 is deleted, and with it the remote corba field. + FIELDClient f1(field1); + CORBA::Double norme = f1.norm2(); + END_OF("CALCULATOR::Norm2(SALOME_MED::FIELDDOUBLE_ptr field1)"); + endService( "CALCULATOR::norm2"); + return norme; +} + +CORBA::Double CALCULATOR::normL2(SALOME_MED::FIELDDOUBLE_ptr field1) +{ + beginService( "CALCULATOR::normL2"); + BEGIN_OF("CALCULATOR::NormL2(SALOME_MED::FIELDDOUBLE_ptr field1)"); + + // Create a local field (on the stack) from corba field, apply method normMax on it. + // When exiting the function, FIELDClient f1 is deleted, and with it the remote corba field. + FIELDClientf1(field1); + CORBA::Double norme = f1.normL2(); + // Send a notification message to supervision + ostringstream message("CALCULATOR::normL2 : "); + message << norme; + sendMessage("warning",message.str().c_str()); + END_OF("CALCULATOR::NormL2(SALOME_MED::FIELDDOUBLE_ptr field1)"); + endService( "CALCULATOR::normL2"); + return norme; +} + +CORBA::Double CALCULATOR::normMax(SALOME_MED::FIELDDOUBLE_ptr field1) +{ + beginService( "CALCULATOR::normMax"); + BEGIN_OF("CALCULATOR::NormMax(SALOME_MED::FIELDDOUBLE_ptr field1)"); + // An other way to do it : create an local field on the heap, inside an auto_ptr. + // When exiting the function, auto_ptr is deleted, and with it the local field and + // the remote field if ownership was transferred. + auto_ptr > f1 (new FIELDClient (field1) ); + CORBA::Double norme = f1->normMax(); + END_OF("CALCULATOR::NormMax(SALOME_MED::FIELDDOUBLE_ptr field1)"); + endService( "CALCULATOR::normMax"); + return norme; +} + +CORBA::Double CALCULATOR::normL1(SALOME_MED::FIELDDOUBLE_ptr field1) +{ + beginService( "CALCULATOR::normL1"); + BEGIN_OF("CALCULATOR::NormL1(SALOME_MED::FIELDDOUBLE_ptr field1)"); + auto_ptr > f1 (new FIELDClient (field1) ); + CORBA::Double norme = f1->normL1(); + END_OF("CALCULATOR::Norm2(SALOME_MED::FIELDDOUBLE_ptr field1)"); + endService( "CALCULATOR::normL1"); + return norme; +} + + +SALOME_MED::FIELDDOUBLE_ptr CALCULATOR::applyLin(SALOME_MED::FIELDDOUBLE_ptr field1,CORBA::Double a,CORBA::Double b) +{ + beginService( "CALCULATOR::applyLin"); + BEGIN_OF("applyLin(SALOME_MED::FIELDDOUBLE_ptr field1,CORBA::Double a,CORBA::Double b)"); + // create a local field on the heap, because it has to remain after exiting the function + FIELD * f1 = new FIELDClient(field1); + f1->applyLin(a,b); + + // create servant from f1, give it the property of c++ field (parameter true). + // This imply that when the client will release it's field, it will delete NewField, + // and f1. + FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(f1,true) ; + // activate object + SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = NewField->_this() ; + + END_OF("applyLin(SALOME_MED::FIELDDOUBLE_ptr field1,CORBA::Double a,CORBA::Double b)"); + endService( "CALCULATOR::applyLin"); + return myFieldIOR; +} + +SALOME_MED::FIELDDOUBLE_ptr CALCULATOR::add(SALOME_MED::FIELDDOUBLE_ptr field1, SALOME_MED::FIELDDOUBLE_ptr field2) + throw ( SALOME::SALOME_Exception ) +{ + beginService( "CALCULATOR::add"); + BEGIN_OF("CALCULATOR::add(SALOME_MED::FIELDDOUBLE_ptr field1, SALOME_MED::FIELDDOUBLE_ptr field2)"); + // Create local fields from corba field + FIELDClient f1(field1); + FIELDClient f2(field2); + + // Create new c++ field on the heap by copying f1, add f2 to it. + FIELD* fres = new FIELD(f1); + // catch exception for non compatible fields + try + { + *fres+=f2; + } + catch(MEDEXCEPTION) + { + throw(SALOME_Exception(LOCALIZED("Fields are not compatible"))); + } + // create CORBA field from c++ toField. give property to servant (true) + FIELDDOUBLE_i * myFieldDoubleI = new FIELDDOUBLE_i(fres,true); + SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = myFieldDoubleI->_this() ; + + END_OF("CALCULATOR::add(SALOME_MED::FIELDDOUBLE_ptr field1, SALOME_MED::FIELDDOUBLE_ptr field2)"); + endService( "CALCULATOR::add"); + return myFieldIOR; +} + +void CALCULATOR::cloneField(SALOME_MED::FIELDDOUBLE_ptr field, + SALOME_MED::FIELDDOUBLE_out clone1, SALOME_MED::FIELDDOUBLE_out clone2, + SALOME_MED::FIELDDOUBLE_out clone3, SALOME_MED::FIELDDOUBLE_out clone4) +{ + beginService( "CALCULATOR::cloneField"); + BEGIN_OF("CALCULATOR::cloneField"); + + // load local field, using MED ressource file pointe.med + FIELDClient f(field); + + // create three c++ field on the heap by copying myField_ + // All this fields share with f the same SUPPORT and MESH client. + // Both SUPPORT and MESH client are connected to a reference count, and will + // be deleted after release of all the fields. + FIELD* fc1 = new FIELD(f); + FIELD* fc2 = new FIELD(f); + FIELD* fc3 = new FIELD(f); + FIELD* fc4 = new FIELD(f); + + // Initialize out references : + // Create three CORBA clones with cloned c++ fields - give property of c++ fields to servant (true) + FIELDDOUBLE_i * myClone1 = new FIELDDOUBLE_i(fc1, true); + FIELDDOUBLE_i * myClone2 = new FIELDDOUBLE_i(fc2, true); + FIELDDOUBLE_i * myClone3 = new FIELDDOUBLE_i(fc3, true); + FIELDDOUBLE_i * myClone4 = new FIELDDOUBLE_i(fc4, true); + clone1 = myClone1->_this(); + clone2 = myClone2->_this(); + clone3 = myClone3->_this(); + clone4 = myClone4->_this(); + END_OF("CALCULATOR::cloneField"); + endService( "CALCULATOR::cloneField"); + return; +} + +void CALCULATOR::printField(SALOME_MED::FIELDDOUBLE_ptr field) +{ + beginService( "CALCULATOR::printField"); + + // Create a local field from corba field. + // Use auto_ptr to perform automatic deletion after usage. + // The deletion of the FIELDClient will delete the remote Corba object. + auto_ptr > myField (new FIELDClient (field) ); + + const SUPPORT * mySupport = myField->getSupport(); + cout << "\n------------------ Field "<< myField->getName() << " : " <getDescription() << "------------------" << endl ; + int NumberOfComponents = myField->getNumberOfComponents() ; + cout << "- Type : " << mySupport->getEntity() << endl; + cout << "- Nombre de composantes : "<< NumberOfComponents << endl ; + cout << "- Nombre de valeurs : "<< myField->getNumberOfValues() << endl ; + for (int i=1; igetComponentName(i)<< endl; + cout << " - description : "<getComponentDescription(i) << endl; + cout << " - units : "<getMEDComponentUnit(i) << endl; + } + cout << "- iteration :" << endl ; + cout << " - numero : " << myField->getIterationNumber()<< endl ; + cout << " - ordre : " << myField->getOrderNumber()<< endl ; + cout << " - temps : " << myField->getTime()<< endl ; + cout << "- Type : " << myField->getValueType()<< endl; + + cout << "- Valeurs :"<getNumberOfElements(MED_ALL_ELEMENTS); + + bool displayNode = mySupport->isOnAllElements() && mySupport->getEntity()==MED_NODE; + bool displayBary = mySupport->isOnAllElements() && mySupport->getEntity()==MED_CELL; + int dim_space = mySupport->getMesh()->getSpaceDimension(); + const double * coord = mySupport->getMesh()->getCoordinates(MED_FULL_INTERLACE); + + auto_ptr > barycenter(0); + if(displayBary) + barycenter=auto_ptr > (mySupport->getMesh()->getBarycenter(mySupport)) ; + + const int width=10; + for (int i=1; igetValueI(MED_FULL_INTERLACE,i) ; + if(displayNode) + { + int N=(i-1)*dim_space; + cout << setw(width) << i << setw(width) << coord[N] << " " << setw(width) << coord[N+1]<< " " << setw(width) << coord[N+2] << " : " ; + } + if(displayBary) + cout << setw(width) << i << setw(width) << barycenter->getValueIJ(i,1) << " " << setw(width) << barycenter->getValueIJ(i,2) + << " " << setw(width) << barycenter->getValueIJ(i,3) << " : " ; + for (int j=0; jnorm2() << endl; + cout << "Norme max : " << myField->normMax() << endl; + cout << "------------------------------------------------------------------------" << endl << endl; + endService( "CALCULATOR::printField"); + return; + +} + +CORBA::Double CALCULATOR::convergenceCriteria(SALOME_MED::FIELDDOUBLE_ptr field) +{ + beginService( "CALCULATOR::convergenceCriteria"); + BEGIN_OF("CALCULATOR::convergenceCriteria(SALOME_MED::FIELDDOUBLE_ptr field)"); + + double criteria=1; + static auto_ptr > fold(0); + auto_ptr > fnew (new FIELDClient (field) ); + if (fold.get() == NULL) // if old field is not set, set it and return 1 + fold=fnew; + else + { + // if size of fields are not equal, return 1 + const int size=fold->getNumberOfValues()*fold->getNumberOfComponents(); + if ( size == fnew->getNumberOfValues()*fnew->getNumberOfComponents() ) + { + MED_EN::medModeSwitch mode=fold->getvalue()->getMode(); // storage mode + const double* oldVal= fold->getValue(mode); // retrieve values + const double* newVal= fnew->getValue(mode); + criteria=0.0; + double ecart_rel=0.0; + for (unsigned i=0; i!=size; ++i) // compute criteria + { + if ( oldVal[i] != 0.0) + { + ecart_rel = std::abs( (oldVal[i]-newVal[i])/oldVal[i] ); + if ( ecart_rel>criteria ) + criteria=ecart_rel; + } + } + + } + } + + endService( "CALCULATOR::convergenceCriteria"); + END_OF("CALCULATOR::convergenceCriteria(SALOME_MED::FIELDDOUBLE_ptr field1)"); + return criteria; +} + + + +extern "C" +{ + PortableServer::ObjectId * CALCULATOREngine_factory( + CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + { + MESSAGE("PortableServer::ObjectId * CALCULATOREngine_factory()"); + SCRUTE(interfaceName); + CALCULATOR * myCALCULATOR + = new CALCULATOR(orb, poa, contId, instanceName, interfaceName); + return myCALCULATOR->getId() ; + } +} diff --git a/src/CALCULATOR/CALCULATOR.hxx b/src/CALCULATOR/CALCULATOR.hxx new file mode 100644 index 0000000..960c1b6 --- /dev/null +++ b/src/CALCULATOR/CALCULATOR.hxx @@ -0,0 +1,45 @@ +#ifndef _CALCULATOR_HXX_ +#define _CALCULATOR_HXX_ + +#include +#include CORBA_SERVER_HEADER(CALCULATOR_Gen) +#include CORBA_CLIENT_HEADER(MED) +#include "SALOME_Component_i.hxx" + +class CALCULATOR: + public POA_CALCULATOR_ORB::CALCULATOR_Gen, + public Engines_Component_i +{ + +public: + CALCULATOR(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName); + virtual ~CALCULATOR(); + + CORBA::Double convergenceCriteria(SALOME_MED::FIELDDOUBLE_ptr field); + CORBA::Double normMax(SALOME_MED::FIELDDOUBLE_ptr field1); + CORBA::Double normL2(SALOME_MED::FIELDDOUBLE_ptr field1); + CORBA::Double norm2(SALOME_MED::FIELDDOUBLE_ptr field1); + CORBA::Double normL1(SALOME_MED::FIELDDOUBLE_ptr field1); + SALOME_MED::FIELDDOUBLE_ptr applyLin(SALOME_MED::FIELDDOUBLE_ptr field1,CORBA::Double a,CORBA::Double b); + SALOME_MED::FIELDDOUBLE_ptr add(SALOME_MED::FIELDDOUBLE_ptr field1, SALOME_MED::FIELDDOUBLE_ptr field2) + throw ( SALOME::SALOME_Exception ); + void printField(SALOME_MED::FIELDDOUBLE_ptr field); + void cloneField(SALOME_MED::FIELDDOUBLE_ptr field, SALOME_MED::FIELDDOUBLE_out clone1, SALOME_MED::FIELDDOUBLE_out clone2, + SALOME_MED::FIELDDOUBLE_out clone3, SALOME_MED::FIELDDOUBLE_out clone4); +}; + + +extern "C" + PortableServer::ObjectId * CALCULATOREngine_factory( + CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName); + + +#endif diff --git a/src/CALCULATOR/CALCULATOR_TEST.py b/src/CALCULATOR/CALCULATOR_TEST.py new file mode 100644 index 0000000..5b5ae24 --- /dev/null +++ b/src/CALCULATOR/CALCULATOR_TEST.py @@ -0,0 +1,66 @@ +import salome +import SALOME +import SALOME_MED + +################ GET A MED FIELD FROM FILE pointe.med ################### +# +# This test program is based on the field named fieldcelldoublevector in +# med file $MED_ROOT_DIR/share/salome/resources/pointe.med +from os import environ +filePath=environ["MED_ROOT_DIR"] +filePath=filePath+"/share/salome/resources/" +medFile=filePath+"pointe.med" +fieldname = "fieldcelldouble" + +# Launch the Med Component and use it to load into memory the test field +print "Launch the Med Component: " +med_comp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED") + +# Get a Corba field proxy on the distant field (located in the med_comp server). +try: + studyname = salome.myStudyName + studynameId = salome.myStudyId + print "We are working in the study ",studyname," with the ID ",studynameId + print "Read field ",fieldname + fieldcell = med_comp.readFieldInFile(medFile,studyname,fieldname,-1,-1) + fieldcelldouble = fieldcell._narrow(SALOME_MED.FIELDDOUBLE) +except SALOME.SALOME_Exception, ex: + print ex.details + print ex.details.type + print ex.details.text + print ex.details.sourceFile + print ex.details.lineNumber + raise + +print "Description of Field : " +print fieldcelldouble +print fieldcelldouble.getName() +print fieldcelldouble.getDescription() +print fieldcelldouble.getNumberOfComponents() +# +# +############## Load Calculator Component and test it ################### +# +# +print "Load Calculator Component " +# we need to import CALCULATOR_ORB to get a typed object (to perform narrowing) +import CALCULATOR_ORB +calculator = salome.lcc.FindOrLoadComponent("FactoryServer", "CALCULATOR") +# +print "Appel cloneField : fieldcelldouble -> f1,f2,f3,f4" +(f1,f2,f3,f4)=calculator.cloneField(fieldcelldouble) # fieldcelldouble is consumed +# +calculator.printField(f1) +print "Add fields f2+f3" +f_add=calculator.add(f2, f3) +calculator.printField(f_add) + +# +print "Apply linear function" +f_lin=calculator.applyLin(f4,2.0,1.0) +# +print "Appel Norme Max " +norme=calculator.normMax(f_lin) +print " -> norme = ",norme +# +print "End of Calculator Test!" diff --git a/src/CALCULATOR/Makefile.in b/src/CALCULATOR/Makefile.in new file mode 100644 index 0000000..bc84fbd --- /dev/null +++ b/src/CALCULATOR/Makefile.in @@ -0,0 +1,37 @@ +# source path +top_srcdir=@top_srcdir@ +top_builddir=../.. +srcdir=@srcdir@ +VPATH=.:@srcdir@:@top_srcdir@/idl:${MED_ROOT_DIR}/idl/salome + +@COMMENCE@ + +# Libraries targets + +LIB = libCALCULATOREngine.la +LIB_SRC = CALCULATOR.cxx +LIB_SERVER_IDL = CALCULATOR_Gen.idl +LIB_CLIENT_IDL = SALOME_Component.idl SALOME_Comm.idl SALOME_Exception.idl SALOMEDS.idl Logger.idl MED.idl SALOMEDS_Attributes.idl + + +EXPORT_PYSCRIPTS = CALCULATOR_TEST.py + +OMNIORB_IDLCXXFLAGS+=-I${MED_ROOT_DIR}/idl/salome + +# additionnal information to compil and link file + +CPPFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -I${MED_ROOT_DIR}/include/salome $(MED2_INCLUDES) $(HDF5_INCLUDES) +# CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome + +LDFLAGS+= -lSalomeContainer -lOpUtil -L${KERNEL_ROOT_DIR}/lib/salome $(MED2_LIBS) $(HDF5_LIBS) -L${MED_ROOT_DIR}/lib/salome -lMEDClientcmodule +# -lmedmem -lMEDWrapper_V2_1 -lMEDWrapperBase + +MED.hh MEDSK.cc: MED.idl + omniidl -bcxx -Wbtp -I$(top_builddir)/idl -I${KERNEL_ROOT_DIR}/idl/salome $^ + + + +# Executables targets + +@CONCLUDE@ + diff --git a/src/CALCULATOR/graphe1.py b/src/CALCULATOR/graphe1.py new file mode 100644 index 0000000..0b09810 --- /dev/null +++ b/src/CALCULATOR/graphe1.py @@ -0,0 +1,95 @@ + +# Generated python file of Graph aNewDataFlow + +from SuperV import * + +# Graph creation of aNewDataFlow +def DefaNewDataFlow() : + aNewDataFlow = Graph( 'aNewDataFlow' ) + aNewDataFlow.SetName( 'aNewDataFlow' ) + aNewDataFlow.SetAuthor( '' ) + aNewDataFlow.SetComment( '' ) + aNewDataFlow.Coords( 0 , 0 ) + + # Creation of Factory Nodes + + normL2 = aNewDataFlow.FNode( 'CALCULATOR' , 'CALCULATOR_Gen' , 'normL2' ) + normL2.SetName( 'normL2' ) + normL2.SetAuthor( '' ) + normL2.SetContainer( 'localhost/FactoryServer' ) + normL2.SetComment( 'normL2 from CALCULATOR' ) + normL2.Coords( 496 , 144 ) + InormL2field = normL2.GetInPort( 'field' ) + InormL2Gate = normL2.GetInPort( 'Gate' ) + OnormL2return = normL2.GetOutPort( 'return' ) + OnormL2Gate = normL2.GetOutPort( 'Gate' ) + + readFieldInFile = aNewDataFlow.FNode( 'MED' , 'MED' , 'readFieldInFile' ) + readFieldInFile.SetName( 'readFieldInFile' ) + readFieldInFile.SetAuthor( '' ) + readFieldInFile.SetContainer( 'localhost/FactoryServer' ) + readFieldInFile.SetComment( 'readFieldInFile from MED' ) + readFieldInFile.Coords( 271 , 144 ) + IreadFieldInFilefileName = readFieldInFile.GetInPort( 'fileName' ) + IreadFieldInFilestudyName = readFieldInFile.GetInPort( 'studyName' ) + IreadFieldInFilefieldName = readFieldInFile.GetInPort( 'fieldName' ) + IreadFieldInFileordre = readFieldInFile.GetInPort( 'ordre' ) + IreadFieldInFileiter = readFieldInFile.GetInPort( 'iter' ) + IreadFieldInFileGate = readFieldInFile.GetInPort( 'Gate' ) + OreadFieldInFilereturn = readFieldInFile.GetOutPort( 'return' ) + OreadFieldInFileGate = readFieldInFile.GetOutPort( 'Gate' ) + + # Creation of InLine Nodes + Pyinit_parameter = [] + Pyinit_parameter.append( '# ' ) + Pyinit_parameter.append( '# init_parameter() ' ) + Pyinit_parameter.append( '# ' ) + Pyinit_parameter.append( '# this function initialize med files paths, field names ' ) + Pyinit_parameter.append( '# ' ) + Pyinit_parameter.append( '# returned arguments : ' ) + Pyinit_parameter.append( '# ' ) + Pyinit_parameter.append( '# - fromMedFile (string) : path of file containing fromfieldname ' ) + Pyinit_parameter.append( '# - fromfieldname (string) : name of field ' ) + Pyinit_parameter.append( '# - myStudyId (string) : name of study ' ) + Pyinit_parameter.append( '# ' ) + Pyinit_parameter.append( 'def init_parameter(): ' ) + Pyinit_parameter.append( ' import batchmode_salome ' ) + Pyinit_parameter.append( ' StudyName = batchmode_salome.myStudyName ' ) + Pyinit_parameter.append( ' print "init_parameter : myStudyName = ", StudyName ' ) + Pyinit_parameter.append( ' from os import environ ' ) + Pyinit_parameter.append( ' filePath=environ["MED_ROOT_DIR"] ' ) + Pyinit_parameter.append( ' filePath=filePath+"/share/salome/resources/" ' ) + Pyinit_parameter.append( ' fromMedFile=filePath+"pointe.med" ' ) + Pyinit_parameter.append( ' print "init_parameter : fromMedFile = ", fromMedFile ' ) + Pyinit_parameter.append( ' fromfieldname="fieldcelldouble" ' ) + Pyinit_parameter.append( ' return fromMedFile,fromfieldname,StudyName ' ) + init_parameter = aNewDataFlow.INode( 'init_parameter' , Pyinit_parameter ) + init_parameter.SetName( 'init_parameter' ) + init_parameter.SetAuthor( '' ) + init_parameter.SetComment( 'Compute Node' ) + init_parameter.Coords( 6 , 147 ) + Iinit_parameterGate = init_parameter.GetInPort( 'Gate' ) + Oinit_parameterfromMedFile = init_parameter.OutPort( 'fromMedFile' , 'string' ) + Oinit_parameterfromfieldname = init_parameter.OutPort( 'fromfieldname' , 'string' ) + Oinit_parameterstudyId = init_parameter.OutPort( 'studyId' , 'string' ) + Oinit_parameterGate = init_parameter.GetOutPort( 'Gate' ) + + # Creation of Links + Linit_parameterfromMedFilereadFieldInFilefileName = aNewDataFlow.Link( Oinit_parameterfromMedFile , IreadFieldInFilefileName ) + + Linit_parameterfromfieldnamereadFieldInFilefieldName = aNewDataFlow.Link( Oinit_parameterfromfieldname , IreadFieldInFilefieldName ) + + Linit_parameterstudyIdreadFieldInFilestudyName = aNewDataFlow.Link( Oinit_parameterstudyId , IreadFieldInFilestudyName ) + + LreadFieldInFilereturnnormL2field = aNewDataFlow.Link( OreadFieldInFilereturn , InormL2field ) + + # Input datas + IreadFieldInFileordre.Input( -1 ) + IreadFieldInFileiter.Input( -1 ) + + # Output Ports of the graph + #OnormL2return = normL2.GetOutPort( 'return' ) + return aNewDataFlow + + +aNewDataFlow = DefaNewDataFlow() diff --git a/src/CALCULATOR/graphe1.xml b/src/CALCULATOR/graphe1.xml new file mode 100644 index 0000000..2be4802 --- /dev/null +++ b/src/CALCULATOR/graphe1.xml @@ -0,0 +1,195 @@ + + + + + +? + ? + aNewDataFlow + 1 + ? + +aNewDataFlow + + +long + readFieldInFile__ordre + +long + readFieldInFile__iter + + +double + normL2__return + + + 25/5/2005 - 11:50:2 + 25/5/2005 - 13:49:58 + 2.0 + ? + ? + ? + 0 + 0 + + +CALCULATOR + CALCULATOR_Gen + normL2 + 0 + ? + +normL2 + + +FIELDDOUBLE + field + + +double + return + + + 25/5/2005 - 11:51:15 + 25/5/2005 - 11:51:15 + 2.0 + ? + localhost/FactoryServer + normL2 from CALCULATOR + 496 + 144 + +? + ? + init_parameter + 3 + ? + +init_parameter_1 + + + +string + fromMedFile + +string + fromfieldname + +string + studyId + + + +init_parameter + + + + + + + + + + + + + + + + + + + + + + + 25/5/2005 - 11:57:16 + 25/5/2005 - 11:57:16 + 2.0 + ? + ? + Compute Node + 6 + 147 + +MED + MED + readFieldInFile + 0 + ? + +readFieldInFile + + +string + fileName + +string + studyName + +string + fieldName + +long + ordre + +long + iter + + +FIELD + return + + + 25/5/2005 - 11:57:28 + 25/5/2005 - 11:57:28 + 2.0 + ? + localhost/FactoryServer + readFieldInFile from MED + 271 + 144 + + +init_parameter + fromMedFile + readFieldInFile + fileName + + +init_parameter + fromfieldname + readFieldInFile + fieldName + + +init_parameter + studyId + readFieldInFile + studyName + + +readFieldInFile + return + normL2 + field + + + +aNewDataFlow + readFieldInFile__ordre + readFieldInFile + ordre + +3 + -1 + + +aNewDataFlow + readFieldInFile__iter + readFieldInFile + iter + +3 + -1 + diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..96c9028 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,20 @@ +#============================================================================== +# File : Makefile.in +# Created : ven déc 7 13:32:20 CET 2001 +# Author : Paul RASCLE, EDF +# Project : SALOME +# Copyright : EDF 2001 +# $Header$ +#============================================================================== + +# source path +top_srcdir=@top_srcdir@ +top_builddir=.. +srcdir=@srcdir@ +VPATH=.:@srcdir@ + +@COMMENCE@ + +SUBDIRS = CALCULATOR + +@MODULE@ -- 2.39.2