mirror of
https://gitlab.com/scemama/EZFIO.git
synced 2024-11-19 04:22:25 +01:00
Bash calls ezfio.py
This commit is contained in:
parent
62e78049c2
commit
3b97748adc
@ -1,5 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
EZFIO_ROOT=$( cd $(dirname "${BASH_SOURCE}")/.. ; pwd -P )
|
||||||
|
|
||||||
|
function _ezfio_py()
|
||||||
|
{
|
||||||
|
python ${EZFIO_ROOT}/Python/ezfio.py $@
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function _ezfio_usage()
|
function _ezfio_usage()
|
||||||
{
|
{
|
||||||
echo "
|
echo "
|
||||||
@ -78,8 +86,7 @@ function _ezfio_set_file()
|
|||||||
|
|
||||||
if [[ ! -d $1 ]]
|
if [[ ! -d $1 ]]
|
||||||
then
|
then
|
||||||
echo "No such directory: $1"
|
mkdir -p $1 || return 1
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
export EZFIO_FILE=$1
|
export EZFIO_FILE=$1
|
||||||
_ezfio_info "Set file ${EZFIO_FILE}"
|
_ezfio_info "Set file ${EZFIO_FILE}"
|
||||||
@ -109,18 +116,7 @@ function _ezfio_has()
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f ${EZFIO_FILE}/${1,,}/${2,,} ]]
|
_ezfio_py has $@ && return 0 || return 1
|
||||||
then
|
|
||||||
_ezfio_info "EZFIO has $1 / $2"
|
|
||||||
return 0
|
|
||||||
elif [[ -f ${EZFIO_FILE}/${1,,}/${2,,}.gz ]]
|
|
||||||
then
|
|
||||||
_ezfio_info "EZFIO has $1 / $2"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
_ezfio_info "EZFIO doesn't have $1 / $2"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _ezfio_get()
|
function _ezfio_get()
|
||||||
@ -129,29 +125,15 @@ function _ezfio_get()
|
|||||||
|
|
||||||
if [[ -z $1 ]]
|
if [[ -z $1 ]]
|
||||||
then
|
then
|
||||||
ls ${EZFIO_FILE}
|
ls ${EZFIO_FILE} && return 0 || return 1
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_ezfio_has $@ || return 1
|
|
||||||
|
|
||||||
if [[ -z $2 ]]
|
if [[ -z $2 ]]
|
||||||
then
|
then
|
||||||
ls ${EZFIO_FILE}/${1,,}
|
ls ${EZFIO_FILE}/${1,,} && return 0 || return 1
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f ${EZFIO_FILE}/${1,,}/${2,,} ]]
|
_ezfio_py get $@ && return 0 || return 1
|
||||||
then
|
|
||||||
cat ${EZFIO_FILE}/${1,,}/${2,,}
|
|
||||||
elif [[ -f ${EZFIO_FILE}/${1,,}/${2,,}.gz ]]
|
|
||||||
then
|
|
||||||
zcat ${EZFIO_FILE}/${1,,}/${2,,}.gz
|
|
||||||
else
|
|
||||||
_ezfio_info "EZFIO doesn't have $1 / $2"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _ezfio_set()
|
function _ezfio_set()
|
||||||
@ -160,15 +142,11 @@ function _ezfio_set()
|
|||||||
_require_first_argument $@ || return 1
|
_require_first_argument $@ || return 1
|
||||||
_require_second_argument $@ || return 2
|
_require_second_argument $@ || return 2
|
||||||
|
|
||||||
if [[ ! -d ${EZFIO_FILE}/${1,,} ]]
|
if [[ -z $3 ]]
|
||||||
then
|
then
|
||||||
mkdir -p ${EZFIO_FILE}/${1,,}
|
_ezfio_py set $@ || return 1
|
||||||
fi
|
|
||||||
if [[ ! -z "$3" ]]
|
|
||||||
then
|
|
||||||
echo "$3" > ${EZFIO_FILE}/${1,,}/${2,,}
|
|
||||||
else
|
else
|
||||||
zcat > ${EZFIO_FILE}/${1,,}/${2,,}.gz
|
echo $3 | _ezfio_py set $1 $2 || return 1
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -234,6 +212,9 @@ _Complete()
|
|||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
prev2="${COMP_WORDS[COMP_CWORD-2]}"
|
prev2="${COMP_WORDS[COMP_CWORD-2]}"
|
||||||
|
|
||||||
|
if [[ -n ${EZFIO_FILE} && -d ${EZFIO_FILE} ]]
|
||||||
|
then
|
||||||
|
|
||||||
case "${prev2}" in
|
case "${prev2}" in
|
||||||
set|has|get)
|
set|has|get)
|
||||||
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE}/${prev} ; ls | sed 's/\.gz//' )" -- $cur ) )
|
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE}/${prev} ; ls | sed 's/\.gz//' )" -- $cur ) )
|
||||||
@ -246,27 +227,36 @@ _Complete()
|
|||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
set_file)
|
|
||||||
COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
set|has|get)
|
set|has|get)
|
||||||
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE} ; \ls -d */ | sed 's|/||g')" -- $cur ) )
|
COMPREPLY=( $(compgen -W "$(cd ${EZFIO_FILE} ; \ls -d */ | sed 's|/||g')" -- $cur ) )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if [[ -z ${EZFIO_FILE} ]]
|
|
||||||
then
|
|
||||||
COMPREPLY=( $(compgen -W 'set_file \
|
|
||||||
set_verbose unset_verbose -h' -- $cur ) )
|
|
||||||
else
|
|
||||||
COMPREPLY=( $(compgen -W 'has get set unset_file \
|
COMPREPLY=( $(compgen -W 'has get set unset_file \
|
||||||
set_verbose unset_verbose -h' -- $cur ) )
|
set_verbose unset_verbose -h' -- $cur ) )
|
||||||
fi
|
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
case "${prev}" in
|
||||||
|
set_verbose|unset_verbose)
|
||||||
|
COMPREPLY=()
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
set_file)
|
||||||
|
COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=( $(compgen -W 'set_file \
|
||||||
|
set_verbose unset_verbose -h' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
complete -F _Complete ezfio
|
complete -F _Complete ezfio
|
||||||
|
107
README.rst
107
README.rst
@ -19,8 +19,8 @@ The following packages are needed:
|
|||||||
|
|
||||||
* `IRPF90 <http://irpf90.ups-tlse.fr>`_
|
* `IRPF90 <http://irpf90.ups-tlse.fr>`_
|
||||||
* `Python <http://www.python.org>`_
|
* `Python <http://www.python.org>`_
|
||||||
|
* `GNU make <http://www.python.org>`_ or `Ninja <http://github.com/martine/ninja>`_
|
||||||
|
|
||||||
The latest version can be downloaded `here <http://qmcchem.ups-tlse.fr/files/scemama/EZFIO.latest.tar.gz>`_.
|
|
||||||
|
|
||||||
Tutorial
|
Tutorial
|
||||||
========
|
========
|
||||||
@ -39,15 +39,9 @@ Create an empty directory for your project and unpack the ``EZFIO.tar.gz`` file
|
|||||||
$ ls
|
$ ls
|
||||||
EZFIO/
|
EZFIO/
|
||||||
|
|
||||||
Get into the ``EZFIO`` directory and set up your compiling options:
|
Get into the ``EZFIO`` directory and configure the library to produce the
|
||||||
|
desired suboutines. Get into the ``config`` directory and create a new file
|
||||||
.. code-block:: bash
|
``test.config``
|
||||||
|
|
||||||
$ cp make.config.example make.config
|
|
||||||
$ vim make.config
|
|
||||||
|
|
||||||
Now, configure the library to produce the desired suboutines. Get into
|
|
||||||
the ``config`` directory and create a new file ``test.config``
|
|
||||||
containing::
|
containing::
|
||||||
|
|
||||||
molecule
|
molecule
|
||||||
@ -79,19 +73,27 @@ simple operation is written after an = symbol (as for ``mass`` in the
|
|||||||
Once your configuration file is ready, run ``make`` and your library
|
Once your configuration file is ready, run ``make`` and your library
|
||||||
will be built.
|
will be built.
|
||||||
|
|
||||||
|
|
||||||
Building the library
|
Building the library
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Now, go back to the EZFIO root directory, and run:
|
Now, go back to the EZFIO root directory. To build with GNU make, run:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ make
|
$ make
|
||||||
|
|
||||||
The ``lib`` directory now contains the shared library
|
Or you can use Ninja to build the library:
|
||||||
(``libezfio.so``), the static library (``libezfio.a``), and a static
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ninja
|
||||||
|
|
||||||
|
|
||||||
|
The ``lib`` directory now contains the static library ``libezfio.a``, and a static
|
||||||
library for use under the IRPF90 environment (``libezfio_irp.a``).
|
library for use under the IRPF90 environment (``libezfio_irp.a``).
|
||||||
The ``Python`` directory contains the Python module for the use of the library in Python.
|
The ``Python``, ``Ocaml`` and ``Bash`` directories contain the binding for these languages.
|
||||||
|
|
||||||
|
|
||||||
Using the produced library
|
Using the produced library
|
||||||
--------------------------
|
--------------------------
|
||||||
@ -220,7 +222,7 @@ Create a file named ``create_input.py`` with:
|
|||||||
ezfio.molecule_mass = mass
|
ezfio.molecule_mass = mass
|
||||||
ezfio.molecule_coord = coord
|
ezfio.molecule_coord = coord
|
||||||
|
|
||||||
# Check that the total charge and mass is correct:
|
# Check that the total mass is correct:
|
||||||
print ezfio.properties_mass # Should give 18.
|
print ezfio.properties_mass # Should give 18.
|
||||||
|
|
||||||
Execute the script:
|
Execute the script:
|
||||||
@ -236,10 +238,10 @@ The printed mass is correct, and a new directory (``Water``) was created with ou
|
|||||||
|
|
||||||
$ ls Water/*
|
$ ls Water/*
|
||||||
Water/ezfio:
|
Water/ezfio:
|
||||||
creation
|
creation library user
|
||||||
|
|
||||||
Water/molecule:
|
Water/molecule:
|
||||||
charge.gz coord.gz mass.gz num_atoms
|
coord.gz mass.gz num_atoms
|
||||||
|
|
||||||
In Fortran
|
In Fortran
|
||||||
----------
|
----------
|
||||||
@ -307,6 +309,20 @@ the EZFIO file.
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Compile the fortran program and link it the ``libezfio.a`` library, and run the
|
||||||
|
executable.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ gfortran test.f90 EZFIO/lib/libezfio.a -o test.x
|
||||||
|
$ ./test.x
|
||||||
|
Data in the EZFIO file:
|
||||||
|
16.0000000 0.00000000 0.222396001 0.00000000
|
||||||
|
1.00000000 1.43649399 -0.889660001 0.00000000
|
||||||
|
1.00000000 -1.43649399 -0.889660001 0.00000000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
A new directory (``properties``) was created with the center_of_mass
|
A new directory (``properties``) was created with the center_of_mass
|
||||||
file:
|
file:
|
||||||
|
|
||||||
@ -317,25 +333,64 @@ file:
|
|||||||
creation
|
creation
|
||||||
|
|
||||||
Water/molecule:
|
Water/molecule:
|
||||||
charge.gz coord.gz mass.gz num_atoms
|
coord.gz mass.gz num_atoms
|
||||||
|
|
||||||
Water/properties:
|
Water/properties:
|
||||||
center_of_mass.gz
|
center_of_mass.gz
|
||||||
|
|
||||||
|
|
||||||
Compile and run the program using:
|
Using Bash
|
||||||
|
----------
|
||||||
|
|
||||||
|
To use EZFIO in Bash, you need to source the ``ezfio.sh`` file:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ $FC -o test test.F90 EZFIO/lib/libezfio.a
|
$ source EZFIO/Bash/ezfio.sh
|
||||||
$ ./test
|
|
||||||
|
|
||||||
where ``$FC`` is your fortran compiler, and ``test.F90`` is the file
|
The usage of the ``ezfio`` bash command is::
|
||||||
containing the test example. If you don't have the EZFIO static
|
|
||||||
library, you can use the shared library as:
|
ezfio set_file EZFIO_DIRECTORY
|
||||||
|
ezfio unset_file
|
||||||
|
|
||||||
|
ezfio has DIRECTORY ITEM
|
||||||
|
ezfio get DIRECTORY ITEM
|
||||||
|
ezfio set DIRECTORY ITEM VALUE : Scalar values
|
||||||
|
ezfio set DIRECTORY ITEM : Array values read from stdin
|
||||||
|
|
||||||
|
ezfio set_verbose
|
||||||
|
ezfio unset_verbose
|
||||||
|
|
||||||
|
|
||||||
|
Here is the same script as the Python script, but using Bash (``create_input.sh``):
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/EZFIO/lib
|
#!/bin/bash
|
||||||
$ $FC -o test -L./EZFIO/lib -lezfio
|
|
||||||
|
source EZFIO/Bash/ezfio.sh
|
||||||
|
|
||||||
|
# Select the EZFIO file
|
||||||
|
ezfio set_file Water
|
||||||
|
|
||||||
|
# Set the number of atoms
|
||||||
|
ezfio set molecule num_atoms 3
|
||||||
|
|
||||||
|
# Create the mass array
|
||||||
|
mass="[16.0, 1.0, 1.0]"
|
||||||
|
echo $mass | ezfio set molecule mass
|
||||||
|
|
||||||
|
# Create the coordinates
|
||||||
|
cat << EOF | ezfio set molecule coord
|
||||||
|
[
|
||||||
|
[ 0.000000, 0.222396, 0.0],
|
||||||
|
[ 1.436494, -0.889660, 0.0],
|
||||||
|
[-1.436494, -0.889660, 0.0]
|
||||||
|
]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Check that the total mass is correct:
|
||||||
|
ezfio get properties mass # Should print 18.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
12
configure.py
12
configure.py
@ -52,18 +52,18 @@ def create_build_ninja():
|
|||||||
d["irpf90_files"] = [ "src/{0}".format(x) for x in
|
d["irpf90_files"] = [ "src/{0}".format(x) for x in
|
||||||
"""
|
"""
|
||||||
IRPF90_temp/build.ninja irpf90.make irpf90_entities
|
IRPF90_temp/build.ninja irpf90.make irpf90_entities
|
||||||
tags
|
tags libezfio_groups-gen.py libezfio_util-gen.py
|
||||||
""".split() ] + \
|
""".split() ] + \
|
||||||
"""
|
"""
|
||||||
Python/ezfio.py Ocaml/ezfio.ml Bash/ezfio.sh
|
Python/ezfio.py Ocaml/ezfio.ml
|
||||||
""".split()
|
""".split()
|
||||||
|
|
||||||
d["irpf90_sources"] = [ "src/{0}".format(x) for x in
|
d["irpf90_sources"] = [ "src/{0}".format(x) for x in
|
||||||
"""
|
"""
|
||||||
libezfio_error.irp.f create_ocaml.py groups_templates.py
|
libezfio_error.irp.f create_ocaml.py groups_templates.py
|
||||||
libezfio_file.irp.f create_python.py libezfio_groups-gen.py
|
libezfio_file.irp.f create_python.py
|
||||||
libezfio_groups.irp.f ezfio-head.py libezfio_util-gen.py
|
libezfio_groups.irp.f ezfio-head.py
|
||||||
libezfio_util.irp.f ezfio-tail.py read_config.py run.irp.f
|
libezfio_util.irp.f ezfio-tail.py read_config.py
|
||||||
f_types.py test.py create_bash.py groups.py
|
f_types.py test.py create_bash.py groups.py
|
||||||
""".split() ] + [ "make.config" ]
|
""".split() ] + [ "make.config" ]
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ rule build_libezfio_a
|
|||||||
description = Building libezfio.a
|
description = Building libezfio.a
|
||||||
|
|
||||||
rule build_libezfio_irp_a
|
rule build_libezfio_irp_a
|
||||||
command = cp lib/libezfio.a lib/libezfio_irp.a ; {AR} dv lib/libezfio_irp.a irp_stack.irp.o ; {RANLIB} lib/libezfio_irp.a
|
command = cp lib/libezfio.a lib/libezfio_irp.a ; {AR} dv lib/libezfio_irp.a irp_stack.irp.o > /dev/null ; {RANLIB} lib/libezfio_irp.a
|
||||||
description = Building libezfio_irp.a
|
description = Building libezfio_irp.a
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
# EZFIO is an automatic generator of I/O libraries
|
# EZFIO is an automatic generator of I/O libraries
|
||||||
# Copyright (C) 2009 Anthony SCEMAMA, CNRS
|
# Copyright (C) 2009 Anthony SCEMAMA, CNRS
|
||||||
#
|
#
|
||||||
|
@ -24,3 +24,52 @@
|
|||||||
|
|
||||||
ezfio = ezfio_obj()
|
ezfio = ezfio_obj()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import pprint
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
try:
|
||||||
|
EZFIO_FILE = os.environ["EZFIO_FILE"]
|
||||||
|
except KeyError:
|
||||||
|
print "EZFIO_FILE not defined"
|
||||||
|
return 1
|
||||||
|
|
||||||
|
ezfio.set_file(EZFIO_FILE)
|
||||||
|
|
||||||
|
command = '_'.join(sys.argv[1:]).lower()
|
||||||
|
|
||||||
|
try:
|
||||||
|
f = getattr(ezfio,command)
|
||||||
|
except AttributeError:
|
||||||
|
print "{0} not found".format(command)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if command.startswith('has'):
|
||||||
|
if f(): return 0
|
||||||
|
else : return 1
|
||||||
|
|
||||||
|
elif command.startswith('get'):
|
||||||
|
result = f()
|
||||||
|
pprint.pprint( result, width=60, depth=3, indent=4 )
|
||||||
|
return 0
|
||||||
|
|
||||||
|
elif command.startswith('set'):
|
||||||
|
try:
|
||||||
|
data = eval(sys.stdin.read())
|
||||||
|
except:
|
||||||
|
print "Syntax Error"
|
||||||
|
return 1
|
||||||
|
f(data)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
else:
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
rc = main()
|
||||||
|
sys.exit(rc)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -144,10 +144,3 @@ for group in groups.keys():
|
|||||||
print >>file_py, attributes_arr_py%d
|
print >>file_py, attributes_arr_py%d
|
||||||
|
|
||||||
file_py.close()
|
file_py.close()
|
||||||
|
|
||||||
import create_ocaml
|
|
||||||
create_ocaml.run()
|
|
||||||
|
|
||||||
import create_python
|
|
||||||
create_python.run()
|
|
||||||
|
|
||||||
|
@ -354,6 +354,13 @@ print >>file_py, """
|
|||||||
"""%cwd
|
"""%cwd
|
||||||
|
|
||||||
file_py.close()
|
file_py.close()
|
||||||
|
|
||||||
|
import create_ocaml
|
||||||
|
create_ocaml.run()
|
||||||
|
|
||||||
|
import create_python
|
||||||
|
create_python.run()
|
||||||
|
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, libezfio_buffer_rank ]
|
BEGIN_PROVIDER [ integer, libezfio_buffer_rank ]
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
! EZFIO is an automatic generator of I/O libraries
|
|
||||||
! Copyright (C) 2009 Anthony SCEMAMA, CNRS
|
|
||||||
!
|
|
||||||
! This program is free software; you can redistribute it and/or modify
|
|
||||||
! it under the terms of the GNU General Public License as published by
|
|
||||||
! the Free Software Foundation; either version 2 of the License, or
|
|
||||||
! (at your option) any later version.
|
|
||||||
!
|
|
||||||
! This program is distributed in the hope that it will be useful,
|
|
||||||
! but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
! GNU General Public License for more details.
|
|
||||||
!
|
|
||||||
! You should have received a copy of the GNU General Public License along
|
|
||||||
! with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
!
|
|
||||||
! Anthony Scemama
|
|
||||||
! LCPQ - IRSAMC - CNRS
|
|
||||||
! Universite Paul Sabatier
|
|
||||||
! 118, route de Narbonne
|
|
||||||
! 31062 Toulouse Cedex 4
|
|
||||||
! scemama@irsamc.ups-tlse.fr
|
|
||||||
|
|
||||||
program run
|
|
||||||
BEGIN_DOC
|
|
||||||
! Test run
|
|
||||||
END_DOC
|
|
||||||
! Leave this empty
|
|
||||||
end
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user