mirror of
https://gitlab.com/scemama/EZFIO.git
synced 2025-01-03 10:05:41 +01:00
commit
db5d8597ac
18
.gitignore
vendored
18
.gitignore
vendored
@ -1 +1,19 @@
|
|||||||
update.sh
|
update.sh
|
||||||
|
Python/ezfio.py
|
||||||
|
Ocaml/ezfio.ml
|
||||||
|
Bash/ezfio.sh
|
||||||
|
.ninja_deps
|
||||||
|
.ninja_log
|
||||||
|
generated.ninja
|
||||||
|
lib/libezfio.a
|
||||||
|
lib/libezfio_irp.a
|
||||||
|
make.config
|
||||||
|
src/IRPF90_man/
|
||||||
|
src/IRPF90_temp/
|
||||||
|
src/irpf90.make
|
||||||
|
src/irpf90_entities
|
||||||
|
src/libezfio_groups-gen.py
|
||||||
|
src/libezfio_util-gen.py
|
||||||
|
src/*.pyc
|
||||||
|
src/run
|
||||||
|
src/tags
|
||||||
|
0
Bash/.empty
Normal file
0
Bash/.empty
Normal file
28
Makefile
28
Makefile
@ -25,20 +25,17 @@
|
|||||||
include version
|
include version
|
||||||
include make.config
|
include make.config
|
||||||
|
|
||||||
.PHONY: default clean distclean archive configure
|
.PHONY: default clean veryclean archive configure
|
||||||
|
|
||||||
default: make.config
|
default: make.config
|
||||||
- bash -c "[[ -e lib/libezfio.a ]] && rm $$PWD/lib/*"
|
$(MAKE) -C $$PWD/src
|
||||||
@echo Compiling library && make -C $$PWD/src static
|
|
||||||
@echo Building Python module && make -C $$PWD/src python
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
- bash -c "[[ -e lib/libezfio.a ]] && rm $$PWD/lib/*"
|
- bash -c "[[ -f lib/libezfio.a ]] && rm $$PWD/lib/*"
|
||||||
- bash -c "[[ -e Python/ezfio.py ]] && rm $$PWD/Python/*"
|
- bash -c "[[ -f Python/ezfio.py ]] && rm $$PWD/Python/*"
|
||||||
- make -C $$PWD/src veryclean
|
- bash -c "[[ -f Ocaml/ezfio.ml ]] && rm $$PWD/Ocaml/*"
|
||||||
|
- bash -c "[[ -f Bash/ezfio.sh ]] && rm $$PWD/Bash/*"
|
||||||
distclean: clean
|
- $(MAKE) -C $$PWD/src veryclean
|
||||||
- rm -rf autom4te.cache config.status config.log make.config
|
|
||||||
|
|
||||||
archive: distclean
|
archive: distclean
|
||||||
git archive --format=tar HEAD > EZFIO.$(VERSION).tar
|
git archive --format=tar HEAD > EZFIO.$(VERSION).tar
|
||||||
@ -47,9 +44,12 @@ archive: distclean
|
|||||||
tar -zcvf EZFIO.$(VERSION).tar.gz EZFIO
|
tar -zcvf EZFIO.$(VERSION).tar.gz EZFIO
|
||||||
rm -rf EZFIO
|
rm -rf EZFIO
|
||||||
|
|
||||||
configure: make.config.in configure.ac
|
|
||||||
autoconf
|
|
||||||
|
|
||||||
make.config:
|
make.config:
|
||||||
./configure --host=dummy
|
python configure.py
|
||||||
|
|
||||||
|
veryclean:
|
||||||
|
$(MAKE) -C src veryclean
|
||||||
|
rm -f make.config
|
||||||
|
rm -f Ocaml/ezfio.ml
|
||||||
|
rm -f Python/ezfio.py
|
||||||
|
rm -f lib/{libezfio.a,libezfio_irp.a}
|
||||||
|
86
README
86
README
@ -1,86 +0,0 @@
|
|||||||
======================================================================
|
|
||||||
EZFIO
|
|
||||||
======================================================================
|
|
||||||
|
|
||||||
Author: A. Scemama, LCPQ-IRSAMC, CNRS-Universite Paul Sabatier
|
|
||||||
scemama@irsamc.ups-tlse.fr
|
|
||||||
|
|
||||||
== About EZFIO ==
|
|
||||||
|
|
||||||
EZFIO is the Easy Fortran I/O library. With EZFIO, your data is organized
|
|
||||||
in a file system inside a main directory. This main directory contains
|
|
||||||
subdirectories, which contain files. Each file corresponds to a data. For
|
|
||||||
atomic data the file is a plain text file, and for array data the file is a
|
|
||||||
gzipped text file.
|
|
||||||
|
|
||||||
|
|
||||||
== Building a library ==
|
|
||||||
|
|
||||||
Your EZFIO library is built according to the definitions given in the
|
|
||||||
files of the 'config' directory. A configuration file can be, for example:
|
|
||||||
---
|
|
||||||
|
|
||||||
system
|
|
||||||
title character*(128)
|
|
||||||
num_elec integer = system_num_alpha + system_num_beta
|
|
||||||
num_alpha integer
|
|
||||||
num_beta integer
|
|
||||||
|
|
||||||
geometry
|
|
||||||
num_atom integer
|
|
||||||
nuc_energy double precision
|
|
||||||
label character*(32) (geometry_num_atom)
|
|
||||||
atomic_number integer (geometry_num_atom)
|
|
||||||
charge double precision (geometry_num_atom)
|
|
||||||
coord double precision (3,geometry_num_atom)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
A subdirectory is defined by its name at the beginning of a new line. The
|
|
||||||
data contained in this subdirectory is defined by the triplet
|
|
||||||
(name,type,dimension), leaving at least one white space at the beginning of the
|
|
||||||
line.
|
|
||||||
If the dimension of an array is a data defined in the file, its name can be
|
|
||||||
used as <name of the subdirectory>_<name of the data>. For example, the
|
|
||||||
dimension '(geometry_num_atom)' uses the data 'num_atom' of subdirectory
|
|
||||||
'geometry'.
|
|
||||||
A data can also be the result of a simple operation. In that case, the
|
|
||||||
simple operation is written after an '=' symbol (as for 'num_elec'). In
|
|
||||||
that case, the data is read_only.
|
|
||||||
|
|
||||||
Once your configuration file is ready, run 'make' and your library will be
|
|
||||||
built.
|
|
||||||
|
|
||||||
== Using the library ==
|
|
||||||
|
|
||||||
In the following, we will call 'EZFIO file' the main directory containing the
|
|
||||||
EZFIO data.
|
|
||||||
|
|
||||||
Only one EZFIO file can be manipulated at a time. To select a file, use:
|
|
||||||
character*(64) :: filename
|
|
||||||
call ezfio_set_file(filename)
|
|
||||||
To get the name of the current used EZFIO file, use
|
|
||||||
character*(64) :: filename
|
|
||||||
call ezfio_get_filename(filename)
|
|
||||||
|
|
||||||
For each data, 3 subroutines are created.
|
|
||||||
<dir> is the name of the subdirectory which contains the data and
|
|
||||||
<data> is the name of the data.
|
|
||||||
|
|
||||||
* subroutine ezfio_has_<dir>_<data> (result)
|
|
||||||
sets result to .True. if the data exists in the EZFIO file, .False. otherwise.
|
|
||||||
|
|
||||||
* subroutine ezfio_set_<dir>_<data> (source)
|
|
||||||
writes the source data to the EZFIO file.
|
|
||||||
|
|
||||||
* subroutine ezfio_get_<dir>_<data> (destination)
|
|
||||||
reads the data from the EZFIO file to the destination.
|
|
||||||
|
|
||||||
For safety, a read-only attribute can be set to the file by
|
|
||||||
call ezfio_set_read_only(.True.)
|
|
||||||
or inquired by
|
|
||||||
logical :: is_read_only
|
|
||||||
call ezfio_is_read_only(is_read_only)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
106
README.rst
106
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,14 +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 run:
|
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``
|
||||||
|
|
||||||
$ ./configure
|
|
||||||
|
|
||||||
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
|
||||||
@ -78,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
|
||||||
--------------------------
|
--------------------------
|
||||||
@ -219,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:
|
||||||
@ -235,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
|
||||||
----------
|
----------
|
||||||
@ -306,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:
|
||||||
|
|
||||||
@ -316,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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
30
build.ninja
Normal file
30
build.ninja
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
include version
|
||||||
|
|
||||||
|
rule build_generated_ninja
|
||||||
|
command = python $in ninja
|
||||||
|
description = Creating generated.ninja
|
||||||
|
generator = 1
|
||||||
|
|
||||||
|
rule run_ninja
|
||||||
|
command = bash -c 'source make.config ; bash -c "$$NINJA -f $in"'
|
||||||
|
description = Building Fortran library
|
||||||
|
|
||||||
|
rule build_archive
|
||||||
|
command = git archive --format=tar HEAD > EZFIO.${version}.tar && mkdir -p EZFIO && cd EZFIO && tar -xvf ../EZFIO.${version}.tar && cd .. && rm EZFIO.${version}.tar && tar -zcvf EZFIO.${version}.tar.gz EZFIO && rm -rf EZFIO
|
||||||
|
description = Building archive
|
||||||
|
|
||||||
|
rule clean_all
|
||||||
|
command = bash -c 'source make.config ; bash -c "$$NINJA -f $in -t clean ; $$NINJA -t clean" ; rm -rf src/IRPF90_{temp,man} src/*.pyc'
|
||||||
|
description = Cleaning directory
|
||||||
|
|
||||||
|
|
||||||
|
build make.config generated.ninja: build_generated_ninja configure.py
|
||||||
|
|
||||||
|
build all: run_ninja generated.ninja
|
||||||
|
default all
|
||||||
|
|
||||||
|
build EZFIO.${VERSION}.tar.gz: build_archive
|
||||||
|
|
||||||
|
build archive: phony EZFIO.${VERSION}.tar.gz
|
||||||
|
|
||||||
|
build clean: clean_all generated.ninja
|
134
configure.ac
134
configure.ac
@ -1,134 +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
|
|
||||||
# -*- Autoconf -*-
|
|
||||||
# Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
VERSION=[`. version ; echo $VERSION`]
|
|
||||||
AC_SUBST([VERSION])
|
|
||||||
|
|
||||||
AC_REVISION([$Revision: $VERSION $])
|
|
||||||
|
|
||||||
AC_PREREQ([2.50])
|
|
||||||
|
|
||||||
AC_INIT([EZFIO Library Generator], [], [scemama@irsamc.ups-tlse.fr],[ezfio],[http://ezfio.sourceforge.net])
|
|
||||||
|
|
||||||
AC_SYS_LONG_FILE_NAMES
|
|
||||||
ROOT=`pwd`
|
|
||||||
AC_SUBST([ROOT])
|
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([src/run.irp.f])
|
|
||||||
AC_CONFIG_FILES([make.config])
|
|
||||||
AC_PREFIX_DEFAULT([./])
|
|
||||||
|
|
||||||
STATIC_LIB=$ROOT/lib/libezfio.a
|
|
||||||
|
|
||||||
AC_PROG_RANLIB
|
|
||||||
|
|
||||||
# Test Fortran
|
|
||||||
# ------------
|
|
||||||
|
|
||||||
AC_LANG([Fortran])
|
|
||||||
AC_PROG_FC([ifort gfortran],[Fortran 90])
|
|
||||||
AC_PROG_FC_C_O
|
|
||||||
AC_FC_SRCEXT([F90])
|
|
||||||
AC_FC_FREEFORM
|
|
||||||
|
|
||||||
# Test Python
|
|
||||||
# ------------
|
|
||||||
|
|
||||||
AC_CHECK_PROG([PYTHON],[python],[yes],[no])
|
|
||||||
if [[ "$PYTHON" = no ]] ; then
|
|
||||||
AC_MSG_ERROR([Please install Python.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Test AR
|
|
||||||
# -------
|
|
||||||
|
|
||||||
if [[ -z "$AR" ]] ; then
|
|
||||||
AC_CHECK_PROG([AR],[ar],[yes],[no])
|
|
||||||
if [[ "$AR" = no ]] ; then
|
|
||||||
AC_MSG_ERROR([ar not found.])
|
|
||||||
fi
|
|
||||||
AR=ar
|
|
||||||
fi
|
|
||||||
AC_SUBST([AR])
|
|
||||||
|
|
||||||
# Test Gzip and zcat
|
|
||||||
# ------------------
|
|
||||||
|
|
||||||
if [[ -z "$HAS_GZIP" ]] ; then
|
|
||||||
AC_CHECK_PROG([GZIP],[gzip],[yes],[no])
|
|
||||||
if [[ "$GZIP" = no ]] ; then
|
|
||||||
HAS_GZIP="-DNO_GZIP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_PROG([ZCAT],[zcat],[yes],[no])
|
|
||||||
if [[ "$ZCAT" = no ]] ; then
|
|
||||||
HAS_GZIP="-DNO_GZIP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_PROG([MKFIFO],[mkfifo],[yes],[no])
|
|
||||||
if [[ "$MKFIFO" = no ]] ; then
|
|
||||||
HAS_GZIP="-DNO_GZIP"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_SUBST([HAS_GZIP])
|
|
||||||
|
|
||||||
# Test IRPF90
|
|
||||||
# ------------
|
|
||||||
|
|
||||||
if [[ -z "$IRPF90" ]] ; then
|
|
||||||
AC_CHECK_PROG([IRPF90],[irpf90],[yes],[no])
|
|
||||||
if [[ "$IRPF90" = no ]] ; then
|
|
||||||
AC_MSG_ERROR([Please install IRPF90:\nhttp://irpf90.ups-tlse.fr])
|
|
||||||
fi
|
|
||||||
IRPF90=`which irpf90`
|
|
||||||
fi
|
|
||||||
AC_SUBST([IRPF90])
|
|
||||||
|
|
||||||
if [[ -z "$FCFLAGS" ]] ; then
|
|
||||||
case $FC in
|
|
||||||
ifort*)
|
|
||||||
FCFLAGS="-O2 -g -ip"
|
|
||||||
STATIC_FC="-static-intel -static-libgcc -static"
|
|
||||||
;;
|
|
||||||
gfortran*)
|
|
||||||
FCFLAGS="-O2 -g -ffree-line-length-none"
|
|
||||||
STATIC_FC="-static-libgcc -static"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Write make.config
|
|
||||||
|
|
||||||
LIB="$STATIC_LIB"
|
|
||||||
FCFLAGS="$FCFLAGS $STATIC_FC"
|
|
||||||
AC_SUBST([LIB])
|
|
||||||
|
|
||||||
# Done
|
|
||||||
#-----
|
|
||||||
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
|
|
132
configure.py
Executable file
132
configure.py
Executable file
@ -0,0 +1,132 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os,sys
|
||||||
|
|
||||||
|
with open("version",'r') as f:
|
||||||
|
version = f.read().strip().rsplit('=')[1]
|
||||||
|
|
||||||
|
d_default = {
|
||||||
|
"VERSION" : version,
|
||||||
|
"IRPF90" : 'irpf90',
|
||||||
|
"FC" : 'gfortran -g -ffree-line-length-none -fPIC',
|
||||||
|
"FCFLAGS" : '-O2',
|
||||||
|
"RANLIB" : 'ranlib',
|
||||||
|
"AR" : 'ar',
|
||||||
|
"NINJA" : 'ninja',
|
||||||
|
"CONFIG_FILES" :
|
||||||
|
' '.join([ x for x in os.listdir('config') if x != '.empty'])
|
||||||
|
}
|
||||||
|
|
||||||
|
def create_make_config():
|
||||||
|
|
||||||
|
if sys.argv[-1] == 'ninja':
|
||||||
|
fmt = '{0}="{1}"\n'
|
||||||
|
else:
|
||||||
|
fmt = '{0}={1}\n'
|
||||||
|
|
||||||
|
with open("make.config",'w') as out:
|
||||||
|
for var,default in d_default.iteritems():
|
||||||
|
try:
|
||||||
|
cur = os.environ[var]
|
||||||
|
except KeyError:
|
||||||
|
cur = default
|
||||||
|
out.write(fmt.format(var,cur))
|
||||||
|
|
||||||
|
|
||||||
|
def read_make_config():
|
||||||
|
result = {}
|
||||||
|
with open("make.config",'r') as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
try:
|
||||||
|
key, value = line.strip().split('=')
|
||||||
|
except:
|
||||||
|
print "Error in make.config:"
|
||||||
|
print line
|
||||||
|
sys.exit(1)
|
||||||
|
result[key] = value
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def create_build_ninja():
|
||||||
|
|
||||||
|
if "make.config" not in os.listdir(os.getcwd()):
|
||||||
|
create_make_config()
|
||||||
|
|
||||||
|
d = read_make_config()
|
||||||
|
|
||||||
|
d["irpf90_files"] = [ "src/{0}".format(x) for x in
|
||||||
|
"""
|
||||||
|
IRPF90_temp/build.ninja irpf90.make irpf90_entities
|
||||||
|
tags libezfio_groups-gen.py libezfio_util-gen.py
|
||||||
|
""".split() ]
|
||||||
|
|
||||||
|
d["irpf90_sources"] = [ "src/{0}".format(x) for x in
|
||||||
|
"""
|
||||||
|
libezfio_error.irp.f create_ocaml.py groups_templates.py
|
||||||
|
libezfio_file.irp.f create_python.py
|
||||||
|
libezfio_groups.irp.f ezfio-head.py
|
||||||
|
libezfio_util.irp.f ezfio-tail.py read_config.py
|
||||||
|
f_types.py test.py groups.py
|
||||||
|
""".split() ] + [ "make.config" ]
|
||||||
|
|
||||||
|
d["irpf90_files"] = ' '.join(d["irpf90_files"])
|
||||||
|
d["irpf90_sources"] = ' '.join(d["irpf90_sources"])
|
||||||
|
|
||||||
|
|
||||||
|
template = """
|
||||||
|
rule build_archive
|
||||||
|
command = git archive --format=tar HEAD > EZFIO.{VERSION}.tar && mkdir -p EZFIO && cd EZFIO && tar -xvf ../EZFIO.{VERSION}.tar && cd .. && rm EZFIO.{VERSION}.tar && tar -zcvf EZFIO.{VERSION}.tar.gz EZFIO && rm -rf EZFIO
|
||||||
|
description = Building archive
|
||||||
|
|
||||||
|
rule build_make_config
|
||||||
|
command = python configure.py
|
||||||
|
description = Creating make.config
|
||||||
|
|
||||||
|
rule compile_irpf90
|
||||||
|
command = cd src ; {IRPF90} --ninja
|
||||||
|
description = Compiling IRPF90
|
||||||
|
|
||||||
|
rule build_irpf90_a
|
||||||
|
command = {NINJA} -C src/IRPF90_temp
|
||||||
|
description = Compiling Fortran files
|
||||||
|
|
||||||
|
rule build_libezfio_a
|
||||||
|
command = cp src/IRPF90_temp/irpf90.a lib/libezfio.a ; {RANLIB} lib/libezfio.a
|
||||||
|
description = Building libezfio.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 > /dev/null ; {RANLIB} lib/libezfio_irp.a
|
||||||
|
description = Building libezfio_irp.a
|
||||||
|
|
||||||
|
rule build_python
|
||||||
|
command = cd src ; python create_python.py
|
||||||
|
description = Building Python module
|
||||||
|
|
||||||
|
rule build_ocaml
|
||||||
|
command = cd src ; python create_ocaml.py
|
||||||
|
description = Building Ocaml module
|
||||||
|
|
||||||
|
|
||||||
|
build make.config: build_make_config | configure.py
|
||||||
|
|
||||||
|
build {irpf90_files}: compile_irpf90 | {irpf90_sources}
|
||||||
|
|
||||||
|
build src/IRPF90_temp/irpf90.a: build_irpf90_a | {irpf90_files}
|
||||||
|
|
||||||
|
build lib/libezfio.a: build_libezfio_a | src/IRPF90_temp/irpf90.a
|
||||||
|
|
||||||
|
build lib/libezfio_irp.a: build_libezfio_irp_a | lib/libezfio.a
|
||||||
|
|
||||||
|
build Python/ezfio.py: build_python | lib/libezfio.a
|
||||||
|
|
||||||
|
build Ocaml/ezfio.ml: build_ocaml | lib/libezfio.a
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
with open('generated.ninja','w') as f:
|
||||||
|
f.write(template.format(**d))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
create_build_ninja()
|
@ -1,5 +0,0 @@
|
|||||||
IRPF90 = @IRPF90@ @HAS_GZIP@
|
|
||||||
FC = @FC@ -fPIC
|
|
||||||
FCFLAGS= @FCFLAGS@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
AR = @AR@
|
|
25
src/Makefile
25
src/Makefile
@ -22,11 +22,10 @@
|
|||||||
# 31062 Toulouse Cedex 4
|
# 31062 Toulouse Cedex 4
|
||||||
# scemama@irsamc.ups-tlse.fr
|
# scemama@irsamc.ups-tlse.fr
|
||||||
|
|
||||||
DEFAULT_TARGET: python
|
DEFAULT_TARGET: all
|
||||||
|
|
||||||
../make.config:
|
|
||||||
make -C .. make.config
|
|
||||||
include ../make.config
|
include ../make.config
|
||||||
|
export
|
||||||
|
|
||||||
include irpf90.make
|
include irpf90.make
|
||||||
|
|
||||||
@ -35,25 +34,27 @@ irpf90.make: $(wildcard *.irp.f) ../config/*
|
|||||||
|
|
||||||
include ../version
|
include ../version
|
||||||
|
|
||||||
.PHONY: python static
|
.PHONY: static all
|
||||||
|
|
||||||
static: ../lib/libezfio_irp.a ../lib/libezfio.a
|
all: static ../Python/ezfio.py ../Ocaml/ezfio.ml
|
||||||
|
|
||||||
../lib/libezfio.a: $(OBJ1)
|
static: ../lib/libezfio.a ../lib/libezfio_irp.a
|
||||||
- bash -c "[[ -e ../libezfio.a ]] && rm ../lib/libezfio.a"
|
|
||||||
|
../lib/libezfio.a: IRPF90_temp/irpf90.a
|
||||||
|
rm -f ../lib/libezfio.a
|
||||||
$(AR) cru ../lib/libezfio.a $(OBJ1)
|
$(AR) cru ../lib/libezfio.a $(OBJ1)
|
||||||
$(RANLIB) ../lib/libezfio.a
|
$(RANLIB) ../lib/libezfio.a
|
||||||
|
|
||||||
../lib/libezfio_irp.a: ../lib/libezfio.a
|
../lib/libezfio_irp.a: ../lib/libezfio.a
|
||||||
|
rm -f ../lib/libezfio_irp.a
|
||||||
cp ../lib/libezfio.a ../lib/libezfio_irp.a
|
cp ../lib/libezfio.a ../lib/libezfio_irp.a
|
||||||
$(AR) dv ../lib/libezfio_irp.a irp_stack.irp.o
|
$(AR) dv ../lib/libezfio_irp.a irp_stack.irp.o
|
||||||
$(RANLIB) ../lib/libezfio_irp.a
|
$(RANLIB) ../lib/libezfio_irp.a
|
||||||
|
|
||||||
test: static
|
../Python/ezfio.py:
|
||||||
ifort -o $@ IRPF90_temp/run.irp.F90 -L../lib/ -lezfio
|
python create_python.py
|
||||||
|
|
||||||
python: static
|
../Ocaml/ezfio.ml:
|
||||||
cat ezfio-head.py libezfio_groups-gen.py libezfio_util-gen.py ezfio-tail.py > ../Python/ezfio.py
|
python create_ocaml.py
|
||||||
|
|
||||||
ezfio.py: python
|
|
||||||
|
|
||||||
|
@ -87,3 +87,7 @@ def run():
|
|||||||
file.write(template)
|
file.write(template)
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
||||||
|
|
||||||
|
33
src/create_python.py
Executable file
33
src/create_python.py
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 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
|
||||||
|
|
||||||
|
def run():
|
||||||
|
with open('../Python/ezfio.py','w') as out:
|
||||||
|
for f in "ezfio-head.py libezfio_groups-gen.py libezfio_util-gen.py ezfio-tail.py".split():
|
||||||
|
with open(f,'r') as inp:
|
||||||
|
out.write(inp.read())
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
@ -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,7 +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()
|
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ END_PROVIDER
|
|||||||
|
|
||||||
attributes = """
|
attributes = """
|
||||||
BEGIN_PROVIDER [ %(type)s, %(group)s_%(var)s ]
|
BEGIN_PROVIDER [ %(type)s, %(group)s_%(var)s ]
|
||||||
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! %(var)s attribute of group %(group)s
|
! %(var)s attribute of group %(group)s
|
||||||
END_DOC
|
END_DOC
|
||||||
@ -58,22 +59,38 @@ BEGIN_PROVIDER [ %(type)s, %(group)s_%(var)s ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
subroutine ezfio_set_%(group)s_%(var)s(%(var)s)
|
subroutine ezfio_set_%(group)s_%(var)s(%(var)s)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Sets the %(group)s/%(var)s attribute
|
||||||
|
END_DOC
|
||||||
%(type_set)s :: %(var)s
|
%(type_set)s :: %(var)s
|
||||||
call ezfio_write_%(type_short)s(path_%(group)s,'%(var)s',%(var)s)
|
call ezfio_write_%(type_short)s(path_%(group)s,'%(var)s',%(var)s)
|
||||||
FREE %(group)s_%(var)s
|
FREE %(group)s_%(var)s
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Gets the %(group)s/%(var)s attribute
|
||||||
|
END_DOC
|
||||||
%(type)s :: %(var)s
|
%(type)s :: %(var)s
|
||||||
%(var)s = %(group)s_%(var)s
|
%(var)s = %(group)s_%(var)s
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_has_%(group)s_%(var)s(result)
|
subroutine ezfio_has_%(group)s_%(var)s(result)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! True if the %(group)s/%(var)s attribute exists in the EZFIO directory
|
||||||
|
END_DOC
|
||||||
logical :: result
|
logical :: result
|
||||||
inquire(file=trim(path_%(group)s)//'/%(var)s',exist=result)
|
inquire(file=trim(path_%(group)s)//'/%(var)s',exist=result)
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_free_%(group)s_%(var)s()
|
subroutine ezfio_free_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Frees the memory for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
FREE %(group)s_%(var)s
|
FREE %(group)s_%(var)s
|
||||||
end
|
end
|
||||||
"""
|
"""
|
||||||
@ -95,6 +112,10 @@ BEGIN_PROVIDER [ %(type)s, %(group)s_%(var)s, %(dims)s ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
subroutine ezfio_set_%(group)s_%(var)s(%(var)s)
|
subroutine ezfio_set_%(group)s_%(var)s(%(var)s)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Sets the %(group)s/%(var)s attribute
|
||||||
|
END_DOC
|
||||||
%(type_set)s :: %(var)s (*)
|
%(type_set)s :: %(var)s (*)
|
||||||
integer :: rank, dim_max, i
|
integer :: rank, dim_max, i
|
||||||
integer :: dims(10)
|
integer :: dims(10)
|
||||||
@ -107,17 +128,29 @@ subroutine ezfio_set_%(group)s_%(var)s(%(var)s)
|
|||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Gets the %(group)s/%(var)s attribute
|
||||||
|
END_DOC
|
||||||
%(type)s, intent(out) :: %(var)s (*)
|
%(type)s, intent(out) :: %(var)s (*)
|
||||||
character*(1024) :: message
|
character*(1024) :: message
|
||||||
%(var)s(1: %(dim_max)s ) = reshape ( %(group)s_%(var)s, (/ %(dim_max)s /) )
|
%(var)s(1: %(dim_max)s ) = reshape ( %(group)s_%(var)s, (/ %(dim_max)s /) )
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_has_%(group)s_%(var)s(result)
|
subroutine ezfio_has_%(group)s_%(var)s(result)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! True if the %(group)s/%(var)s attribute exists in the EZFIO directory
|
||||||
|
END_DOC
|
||||||
logical :: result
|
logical :: result
|
||||||
inquire(file=trim(path_%(group)s)//'/%(var)s.gz',exist=result)
|
inquire(file=trim(path_%(group)s)//'/%(var)s.gz',exist=result)
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_free_%(group)s_%(var)s()
|
subroutine ezfio_free_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Frees the memory for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
FREE %(group)s_%(var)s
|
FREE %(group)s_%(var)s
|
||||||
end
|
end
|
||||||
"""
|
"""
|
||||||
@ -131,38 +164,70 @@ BEGIN_PROVIDER [ %(type)s, %(group)s_%(var)s ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
subroutine ezfio_get_%(group)s_%(var)s(%(var)s)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Gets the %(group)s/%(var)s attribute
|
||||||
|
END_DOC
|
||||||
%(type)s, intent(out) :: %(var)s
|
%(type)s, intent(out) :: %(var)s
|
||||||
%(var)s = %(group)s_%(var)s
|
%(var)s = %(group)s_%(var)s
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ezfio_free_%(group)s_%(var)s()
|
subroutine ezfio_free_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Frees the memory for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
FREE %(group)s_%(var)s
|
FREE %(group)s_%(var)s
|
||||||
end
|
end
|
||||||
"""
|
"""
|
||||||
|
|
||||||
buffered="""
|
buffered="""
|
||||||
subroutine ezfio_open_read_%(group)s_%(var)s()
|
subroutine ezfio_open_read_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Opens the read buffer for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
call ezfio_open_read_buffer(path_%(group)s,'%(var)s',%(dims)s)
|
call ezfio_open_read_buffer(path_%(group)s,'%(var)s',%(dims)s)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ezfio_open_write_%(group)s_%(var)s()
|
subroutine ezfio_open_write_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Opens the write buffer for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
call ezfio_open_write_buffer(path_%(group)s,'%(var)s',%(dims)s)
|
call ezfio_open_write_buffer(path_%(group)s,'%(var)s',%(dims)s)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ezfio_close_read_%(group)s_%(var)s()
|
subroutine ezfio_close_read_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closes the read buffer for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
call ezfio_close_read_buffer(path_%(group)s,'%(var)s')
|
call ezfio_close_read_buffer(path_%(group)s,'%(var)s')
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ezfio_close_write_%(group)s_%(var)s()
|
subroutine ezfio_close_write_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closes the write buffer for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
call ezfio_close_write_buffer(path_%(group)s,'%(var)s')
|
call ezfio_close_write_buffer(path_%(group)s,'%(var)s')
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ezfio_has_%(group)s_%(var)s(result)
|
subroutine ezfio_has_%(group)s_%(var)s(result)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! If the %(group)s_%(var)s, returns True
|
||||||
|
END_DOC
|
||||||
logical :: result
|
logical :: result
|
||||||
inquire(file=trim(path_%(group)s)//'/%(var)s.gz',exist=result)
|
inquire(file=trim(path_%(group)s)//'/%(var)s.gz',exist=result)
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
subroutine ezfio_free_%(group)s_%(var)s()
|
subroutine ezfio_free_%(group)s_%(var)s()
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Frees the memory for %(group)s/%(var)s
|
||||||
|
END_DOC
|
||||||
FREE %(group)s_%(var)s
|
FREE %(group)s_%(var)s
|
||||||
end
|
end
|
||||||
"""
|
"""
|
||||||
|
@ -24,6 +24,9 @@
|
|||||||
|
|
||||||
subroutine ezfio_error(where,txt)
|
subroutine ezfio_error(where,txt)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Prints an error message
|
||||||
|
END_DOC
|
||||||
character*(*) :: where
|
character*(*) :: where
|
||||||
character*(*) :: txt
|
character*(*) :: txt
|
||||||
character*(128) :: fname
|
character*(128) :: fname
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
! scemama@irsamc.ups-tlse.fr
|
! scemama@irsamc.ups-tlse.fr
|
||||||
|
|
||||||
BEGIN_PROVIDER [ logical, libezfio_read_only ]
|
BEGIN_PROVIDER [ logical, libezfio_read_only ]
|
||||||
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! If true, the EZFIO file is read-only
|
! If true, the EZFIO file is read-only
|
||||||
END_DOC
|
END_DOC
|
||||||
@ -31,18 +32,29 @@ BEGIN_PROVIDER [ logical, libezfio_read_only ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
subroutine ezfio_set_read_only(v)
|
subroutine ezfio_set_read_only(v)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! If true, sets the EZFIO file in a read-only state
|
||||||
|
END_DOC
|
||||||
logical :: v
|
logical :: v
|
||||||
libezfio_read_only = v
|
libezfio_read_only = v
|
||||||
TOUCH libezfio_read_only
|
TOUCH libezfio_read_only
|
||||||
end subroutine ezfio_set_read_only
|
end subroutine ezfio_set_read_only
|
||||||
|
|
||||||
subroutine ezfio_is_read_only(v)
|
subroutine ezfio_is_read_only(v)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! True if the EZFIO file is in a read-only state
|
||||||
|
END_DOC
|
||||||
logical :: v
|
logical :: v
|
||||||
v = libezfio_read_only
|
v = libezfio_read_only
|
||||||
end subroutine ezfio_is_read_only
|
end subroutine ezfio_is_read_only
|
||||||
|
|
||||||
integer function char_to_version(v)
|
integer function char_to_version(v)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Computes the version number from a string
|
||||||
|
END_DOC
|
||||||
character*(32), intent(in) :: v
|
character*(32), intent(in) :: v
|
||||||
character*(32) :: vnew
|
character*(32) :: vnew
|
||||||
integer :: i, j, k
|
integer :: i, j, k
|
||||||
@ -78,6 +90,9 @@ END_PROVIDER
|
|||||||
|
|
||||||
subroutine ezfio_get_filename(fname)
|
subroutine ezfio_get_filename(fname)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Returns the name of the EZFIO file
|
||||||
|
END_DOC
|
||||||
character*(*) :: fname
|
character*(*) :: fname
|
||||||
fname = libezfio_filename
|
fname = libezfio_filename
|
||||||
end subroutine
|
end subroutine
|
||||||
@ -107,6 +122,9 @@ END_PROVIDER
|
|||||||
|
|
||||||
logical function exists(path)
|
logical function exists(path)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Returns True if the path exists
|
||||||
|
END_DOC
|
||||||
character*(*) :: path
|
character*(*) :: path
|
||||||
character*(32) :: V
|
character*(32) :: V
|
||||||
inquire(file=trim(path)//'/.version',exist=exists)
|
inquire(file=trim(path)//'/.version',exist=exists)
|
||||||
@ -124,6 +142,9 @@ end function
|
|||||||
|
|
||||||
subroutine ezfio_set_file(filename_in)
|
subroutine ezfio_set_file(filename_in)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Sets the file for I/O
|
||||||
|
END_DOC
|
||||||
|
|
||||||
character*(*) :: filename_in
|
character*(*) :: filename_in
|
||||||
|
|
||||||
@ -153,6 +174,9 @@ end subroutine
|
|||||||
|
|
||||||
subroutine ezfio_finish()
|
subroutine ezfio_finish()
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Close all open buffers
|
||||||
|
END_DOC
|
||||||
close(libezfio_iunit)
|
close(libezfio_iunit)
|
||||||
BEGIN_SHELL [ /usr/bin/python ]
|
BEGIN_SHELL [ /usr/bin/python ]
|
||||||
import os
|
import os
|
||||||
|
@ -35,6 +35,9 @@ END_PROVIDER
|
|||||||
|
|
||||||
logical function ezfio_exists(path)
|
logical function ezfio_exists(path)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Checks if a file path exists
|
||||||
|
END_DOC
|
||||||
character*(*) :: path
|
character*(*) :: path
|
||||||
inquire(file=trim(path)//'/.version',exist=ezfio_exists)
|
inquire(file=trim(path)//'/.version',exist=ezfio_exists)
|
||||||
if (ezfio_exists) then
|
if (ezfio_exists) then
|
||||||
@ -47,6 +50,9 @@ end function
|
|||||||
|
|
||||||
subroutine ezfio_mkdir(path)
|
subroutine ezfio_mkdir(path)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Creates a directory
|
||||||
|
END_DOC
|
||||||
character*(*) :: path
|
character*(*) :: path
|
||||||
logical :: ezfio_exists
|
logical :: ezfio_exists
|
||||||
if (libezfio_read_only) then
|
if (libezfio_read_only) then
|
||||||
@ -63,6 +69,9 @@ end subroutine
|
|||||||
|
|
||||||
subroutine libezfio_openz(filename,mode,err)
|
subroutine libezfio_openz(filename,mode,err)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Opens a compressed file
|
||||||
|
END_DOC
|
||||||
character*(*) :: filename, mode
|
character*(*) :: filename, mode
|
||||||
character*(1024) :: fifo
|
character*(1024) :: fifo
|
||||||
integer :: err
|
integer :: err
|
||||||
@ -83,6 +92,9 @@ end
|
|||||||
|
|
||||||
subroutine libezfio_closez(filename,mode)
|
subroutine libezfio_closez(filename,mode)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closes a compressed file
|
||||||
|
END_DOC
|
||||||
character*(*) :: filename, mode
|
character*(*) :: filename, mode
|
||||||
character*(1024) :: fifo
|
character*(1024) :: fifo
|
||||||
fifo = trim(filename)//'.'//PID_str
|
fifo = trim(filename)//'.'//PID_str
|
||||||
@ -102,6 +114,9 @@ from f_types import format, t_short
|
|||||||
template = """
|
template = """
|
||||||
subroutine ezfio_read_%(type_short)s(dir,fil,dat)
|
subroutine ezfio_read_%(type_short)s(dir,fil,dat)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Reads a %(type_short)s
|
||||||
|
END_DOC
|
||||||
character*(*), intent(in) :: dir, fil
|
character*(*), intent(in) :: dir, fil
|
||||||
%(type)s, intent(out) :: dat
|
%(type)s, intent(out) :: dat
|
||||||
character*(1024) :: l_filename
|
character*(1024) :: l_filename
|
||||||
@ -117,6 +132,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_write_%(type_short)s(dir,fil,dat)
|
subroutine ezfio_write_%(type_short)s(dir,fil,dat)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Writes a %(type_short)s
|
||||||
|
END_DOC
|
||||||
character*(*), intent(in) :: dir, fil
|
character*(*), intent(in) :: dir, fil
|
||||||
%(type)s, intent(in) :: dat
|
%(type)s, intent(in) :: dat
|
||||||
character*(1024) :: l_filename(2)
|
character*(1024) :: l_filename(2)
|
||||||
@ -133,6 +151,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_read_array_%(type_short)s(dir,fil,rank,dims,dim_max,dat)
|
subroutine ezfio_read_array_%(type_short)s(dir,fil,rank,dims,dim_max,dat)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Reads a %(type_short)s array
|
||||||
|
END_DOC
|
||||||
character*(*), intent(in) :: dir, fil
|
character*(*), intent(in) :: dir, fil
|
||||||
integer :: rank
|
integer :: rank
|
||||||
integer :: dims(rank)
|
integer :: dims(rank)
|
||||||
@ -182,6 +203,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_write_array_%(type_short)s(dir,fil,rank,dims,dim_max,dat)
|
subroutine ezfio_write_array_%(type_short)s(dir,fil,rank,dims,dim_max,dat)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Writes a %(type_short)s array
|
||||||
|
END_DOC
|
||||||
character*(*), intent(in) :: dir, fil
|
character*(*), intent(in) :: dir, fil
|
||||||
integer, intent(in) :: rank
|
integer, intent(in) :: rank
|
||||||
integer, intent(in) :: dims(rank)
|
integer, intent(in) :: dims(rank)
|
||||||
@ -213,6 +237,10 @@ end
|
|||||||
|
|
||||||
template_no_logical = """
|
template_no_logical = """
|
||||||
integer function n_count_%(type_short)s(array,isize,val)
|
integer function n_count_%(type_short)s(array,isize,val)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Count number of elements of array of type %(type)s
|
||||||
|
END_DOC
|
||||||
%(type)s, intent(in) :: array(*)
|
%(type)s, intent(in) :: array(*)
|
||||||
integer, intent(in) :: isize
|
integer, intent(in) :: isize
|
||||||
%(type)s, intent(in) :: val
|
%(type)s, intent(in) :: val
|
||||||
@ -326,6 +354,7 @@ print >>file_py, """
|
|||||||
"""%cwd
|
"""%cwd
|
||||||
|
|
||||||
file_py.close()
|
file_py.close()
|
||||||
|
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, libezfio_buffer_rank ]
|
BEGIN_PROVIDER [ integer, libezfio_buffer_rank ]
|
||||||
@ -337,6 +366,9 @@ END_PROVIDER
|
|||||||
|
|
||||||
subroutine ezfio_open_write_buffer(dir,fil,rank)
|
subroutine ezfio_open_write_buffer(dir,fil,rank)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Opens a buffer for writing
|
||||||
|
END_DOC
|
||||||
character*(*),intent(in) :: dir
|
character*(*),intent(in) :: dir
|
||||||
character*(*),intent(in) :: fil
|
character*(*),intent(in) :: fil
|
||||||
integer,intent(in) :: rank
|
integer,intent(in) :: rank
|
||||||
@ -367,6 +399,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_open_read_buffer(dir,fil,rank)
|
subroutine ezfio_open_read_buffer(dir,fil,rank)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Opens a buffer for reading
|
||||||
|
END_DOC
|
||||||
character*(*),intent(in) :: dir
|
character*(*),intent(in) :: dir
|
||||||
character*(*),intent(in) :: fil
|
character*(*),intent(in) :: fil
|
||||||
integer,intent(in) :: rank
|
integer,intent(in) :: rank
|
||||||
@ -399,6 +434,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_close_read_buffer(dir,fil,rank)
|
subroutine ezfio_close_read_buffer(dir,fil,rank)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closes a buffer
|
||||||
|
END_DOC
|
||||||
character*(*),intent(in) :: dir
|
character*(*),intent(in) :: dir
|
||||||
character*(*),intent(in) :: fil
|
character*(*),intent(in) :: fil
|
||||||
integer,intent(in) :: rank
|
integer,intent(in) :: rank
|
||||||
@ -411,6 +449,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_close_write_buffer(dir,fil,rank)
|
subroutine ezfio_close_write_buffer(dir,fil,rank)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closes a buffer
|
||||||
|
END_DOC
|
||||||
character*(*),intent(in) :: dir
|
character*(*),intent(in) :: dir
|
||||||
character*(*),intent(in) :: fil
|
character*(*),intent(in) :: fil
|
||||||
integer,intent(in) :: rank
|
integer,intent(in) :: rank
|
||||||
@ -423,6 +464,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_read_buffer(indices,values,isize)
|
subroutine ezfio_read_buffer(indices,values,isize)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Reads a buffer
|
||||||
|
END_DOC
|
||||||
|
|
||||||
integer, intent(inout) :: isize
|
integer, intent(inout) :: isize
|
||||||
integer, intent(out) :: indices(*)
|
integer, intent(out) :: indices(*)
|
||||||
@ -444,6 +488,9 @@ end
|
|||||||
|
|
||||||
subroutine ezfio_write_buffer(indices,values,isize)
|
subroutine ezfio_write_buffer(indices,values,isize)
|
||||||
implicit none
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Writes a buffer
|
||||||
|
END_DOC
|
||||||
|
|
||||||
integer, intent(in) :: isize
|
integer, intent(in) :: isize
|
||||||
integer, intent(in) :: indices(*)
|
integer, intent(in) :: indices(*)
|
||||||
|
@ -1,28 +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
|
|
||||||
! Leave this empty
|
|
||||||
end
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user