mirror of
https://gitlab.com/scemama/EZFIO.git
synced 2024-12-22 04:13:34 +01:00
Removed Ninja
Version:1.4.0 Version:1.4.0
This commit is contained in:
parent
744cbac511
commit
fa6d40a857
@ -1,4 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ezfio shell command with completion
|
||||||
|
#
|
||||||
|
|
||||||
EZFIO_ROOT=$( cd $(dirname "${BASH_SOURCE}")/.. ; pwd -P )
|
EZFIO_ROOT=$( cd $(dirname "${BASH_SOURCE}")/.. ; pwd -P )
|
||||||
|
|
||||||
|
6
Makefile
6
Makefile
@ -38,19 +38,15 @@ clean:
|
|||||||
- bash -c "[[ -f Bash/ezfio.sh ]] && rm $$PWD/Bash/*"
|
- bash -c "[[ -f Bash/ezfio.sh ]] && rm $$PWD/Bash/*"
|
||||||
- $(MAKE) -C $$PWD/src veryclean
|
- $(MAKE) -C $$PWD/src veryclean
|
||||||
|
|
||||||
archive: distclean
|
archive: veryclean
|
||||||
git archive --format=tar HEAD > EZFIO.$(VERSION).tar
|
git archive --format=tar HEAD > EZFIO.$(VERSION).tar
|
||||||
mkdir EZFIO ; cd EZFIO ; tar -xvf ../EZFIO.$(VERSION).tar
|
mkdir EZFIO ; cd EZFIO ; tar -xvf ../EZFIO.$(VERSION).tar
|
||||||
rm EZFIO.$(VERSION).tar
|
rm EZFIO.$(VERSION).tar
|
||||||
tar -zcvf EZFIO.$(VERSION).tar.gz EZFIO
|
tar -zcvf EZFIO.$(VERSION).tar.gz EZFIO
|
||||||
rm -rf EZFIO
|
rm -rf EZFIO
|
||||||
|
|
||||||
make.config:
|
|
||||||
./configure.py
|
|
||||||
|
|
||||||
veryclean:
|
veryclean:
|
||||||
$(MAKE) -C src veryclean
|
$(MAKE) -C src veryclean
|
||||||
rm -f make.config
|
|
||||||
rm -f Ocaml/ezfio.ml
|
rm -f Ocaml/ezfio.ml
|
||||||
rm -f Python/ezfio.py
|
rm -f Python/ezfio.py
|
||||||
rm -f lib/{libezfio.a,libezfio_irp.a}
|
rm -f lib/{libezfio.a,libezfio_irp.a}
|
||||||
|
54
README.rst
54
README.rst
@ -4,8 +4,8 @@ EZFIO
|
|||||||
EZFIO is the Easy Fortran I/O library generator. It generates
|
EZFIO is the Easy Fortran I/O library generator. It generates
|
||||||
automatically an I/O library from a simple configuration file. The
|
automatically an I/O library from a simple configuration file. The
|
||||||
produced library contains Fortran subroutines to read/write the data
|
produced library contains Fortran subroutines to read/write the data
|
||||||
from/to disk, and to check if the data exists.
|
from/to disk, and to check if the data exists. A Python and an Ocaml API
|
||||||
A Python and an Ocaml API are also provided.
|
are also provided.
|
||||||
|
|
||||||
With EZFIO, the data is organized in a file system inside a main
|
With EZFIO, the data is organized in a file system inside a main
|
||||||
directory. This main directory contains subdirectories, which contain
|
directory. This main directory contains subdirectories, which contain
|
||||||
@ -19,7 +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>`_
|
* `GNU make <https://www.gnu.org/software/make>`_
|
||||||
|
* `Zlib <https://www.zlib.net>`_
|
||||||
|
|
||||||
|
|
||||||
Tutorial
|
Tutorial
|
||||||
@ -32,7 +33,8 @@ the 3D space.
|
|||||||
Preparation of the library
|
Preparation of the library
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
Create an empty directory for your project and unpack the ``EZFIO.tar.gz`` file in this directory. This directory now contains:
|
Create an empty directory for your project and unpack the
|
||||||
|
``EZFIO.tar.gz`` file in this directory. This directory now contains:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -40,9 +42,8 @@ Create an empty directory for your project and unpack the ``EZFIO.tar.gz`` file
|
|||||||
EZFIO/
|
EZFIO/
|
||||||
|
|
||||||
Get into the ``EZFIO`` directory and configure the library to produce the
|
Get into the ``EZFIO`` directory and configure the library to produce the
|
||||||
desired suboutines. Get into the ``config`` directory and create a new file
|
desired suboutines. Get into the ``config`` directory and create a new
|
||||||
``test.config``
|
file ``test.config`` containing::
|
||||||
containing::
|
|
||||||
|
|
||||||
molecule
|
molecule
|
||||||
num_atoms integer
|
num_atoms integer
|
||||||
@ -56,14 +57,13 @@ containing::
|
|||||||
|
|
||||||
In this example, ``molecule`` and ``properties`` are containers of data.
|
In this example, ``molecule`` and ``properties`` are containers of data.
|
||||||
Those are defined in the config file by their name at the beginning of a
|
Those are defined in the config file by their name at the beginning of a
|
||||||
new line.
|
new line. Each data contained inside a container is characterized by a
|
||||||
Each data contained inside a container is characterized by a triplet
|
triplet (name,type,dimension), preceded by at least one white space at
|
||||||
(name,type,dimension), preceded by at least one white space at the
|
the beginning of the line.
|
||||||
beginning of the line.
|
|
||||||
|
|
||||||
If the dimension of an array is a data, the name of the data can be used
|
If the dimension of an array is a data, the name of the data can be
|
||||||
as ``<container>_<data>`` in the definition of the dimension. For
|
used as ``<container>_<data>`` in the definition of the dimension.
|
||||||
example, the dimension (``molecule_num_atoms``) uses the data
|
For example, the dimension (``molecule_num_atoms``) uses the data
|
||||||
``num_atoms`` of container ``molecule``.
|
``num_atoms`` of container ``molecule``.
|
||||||
|
|
||||||
Data can also be the result of a simple operation. In that case, the
|
Data can also be the result of a simple operation. In that case, the
|
||||||
@ -83,16 +83,10 @@ Now, go back to the EZFIO root directory. To build with GNU make, run:
|
|||||||
|
|
||||||
$ make
|
$ make
|
||||||
|
|
||||||
Or you can use Ninja to build the library:
|
The ``lib`` directory now contains the static library ``libezfio.a``,
|
||||||
|
and a static library for use under the IRPF90 environment
|
||||||
.. code-block:: bash
|
(``libezfio_irp.a``). The ``Python``, ``Ocaml`` and ``Bash`` directories
|
||||||
|
contain the binding for these languages.
|
||||||
$ ninja
|
|
||||||
|
|
||||||
|
|
||||||
The ``lib`` directory now contains the static library ``libezfio.a``, and a static
|
|
||||||
library for use under the IRPF90 environment (``libezfio_irp.a``).
|
|
||||||
The ``Python``, ``Ocaml`` and ``Bash`` directories contain the binding for these languages.
|
|
||||||
|
|
||||||
|
|
||||||
Using the produced library
|
Using the produced library
|
||||||
@ -232,7 +226,8 @@ Execute the script:
|
|||||||
$ python2 create_input.py
|
$ python2 create_input.py
|
||||||
18.0
|
18.0
|
||||||
|
|
||||||
The printed mass is correct, and a new directory (``Water``) was created with our data:
|
The printed mass is correct, and a new directory (``Water``) was created
|
||||||
|
with our data:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -309,12 +304,12 @@ the EZFIO file.
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
Compile the fortran program and link it the ``libezfio.a`` library, and run the
|
Compile the fortran program and link it the ``libezfio.a`` library and
|
||||||
executable.
|
``zlib``, and run the executable.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ gfortran test.f90 EZFIO/lib/libezfio.a -o test.x
|
$ gfortran test.f90 EZFIO/lib/libezfio.a -lz -o test.x
|
||||||
$ ./test.x
|
$ ./test.x
|
||||||
Data in the EZFIO file:
|
Data in the EZFIO file:
|
||||||
16.0000000 0.00000000 0.222396001 0.00000000
|
16.0000000 0.00000000 0.222396001 0.00000000
|
||||||
@ -362,7 +357,8 @@ The usage of the ``ezfio`` bash command is::
|
|||||||
ezfio unset_verbose
|
ezfio unset_verbose
|
||||||
|
|
||||||
|
|
||||||
Here is the same script as the Python script, but using Bash (``create_input.sh``):
|
Here is the same script as the Python script, but using Bash
|
||||||
|
(``create_input.sh``):
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
31
build.ninja
31
build.ninja
@ -1,31 +0,0 @@
|
|||||||
include version
|
|
||||||
|
|
||||||
rule build_generated_ninja
|
|
||||||
command = python2 configure.py
|
|
||||||
description = Creating generated.ninja
|
|
||||||
|
|
||||||
rule run_ninja
|
|
||||||
command = bash -c 'source .make.config.sh ; $$NINJA -f $in'
|
|
||||||
description = Building Fortran library
|
|
||||||
pool = console
|
|
||||||
|
|
||||||
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.sh ; bash -c "$$NINJA -f $in -t clean ; $$NINJA -t clean" ; rm -rf src/IRPF90_{temp,man} src/*.pyc'
|
|
||||||
description = Cleaning directory
|
|
||||||
|
|
||||||
|
|
||||||
build make.config .make.config.sh generated.ninja impossible_target: build_generated_ninja
|
|
||||||
|
|
||||||
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
|
|
146
configure.py
146
configure.py
@ -1,146 +0,0 @@
|
|||||||
#!/usr/bin/env python2
|
|
||||||
|
|
||||||
import os,sys
|
|
||||||
|
|
||||||
def write_if_different(filename,s):
|
|
||||||
try:
|
|
||||||
with open(filename, "r") as f:
|
|
||||||
ref = f.read()
|
|
||||||
except:
|
|
||||||
ref = ""
|
|
||||||
|
|
||||||
if ref == s:
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
with open(filename, "w") as f:
|
|
||||||
f.write(s)
|
|
||||||
|
|
||||||
|
|
||||||
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 -fopenmp',
|
|
||||||
"FCFLAGS" : '-O2',
|
|
||||||
"RANLIB" : 'ranlib',
|
|
||||||
"AR" : 'ar',
|
|
||||||
"BUILD_SYSTEM" : 'make',
|
|
||||||
"NINJA" : 'ninja',
|
|
||||||
}
|
|
||||||
|
|
||||||
CONFIG_FILES=' '.join([ os.path.join("config",x) for x in os.listdir('config') if x != '.empty'])
|
|
||||||
|
|
||||||
def create_make_config():
|
|
||||||
|
|
||||||
try:
|
|
||||||
d = read_make_config()
|
|
||||||
except:
|
|
||||||
d = {}
|
|
||||||
|
|
||||||
fmt = { "make.config" :'{0}={1}\n' ,
|
|
||||||
".make.config.sh": 'export {0}="{1}"\n' }
|
|
||||||
|
|
||||||
for var,default in d_default.iteritems():
|
|
||||||
if var not in d:
|
|
||||||
try:
|
|
||||||
cur = os.environ[var]
|
|
||||||
except KeyError:
|
|
||||||
cur = default
|
|
||||||
d[var]=cur
|
|
||||||
|
|
||||||
for filename in fmt:
|
|
||||||
out = ""
|
|
||||||
for var,default in d_default.iteritems():
|
|
||||||
cur = d[var]
|
|
||||||
out += fmt[filename].format(var,cur)
|
|
||||||
write_if_different(filename,out)
|
|
||||||
|
|
||||||
return d
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def read_make_config():
|
|
||||||
result = {}
|
|
||||||
with open("make.config",'r') as f:
|
|
||||||
for line in f.readlines():
|
|
||||||
try:
|
|
||||||
key, value = line.strip().split('=',1)
|
|
||||||
except:
|
|
||||||
print "Error in make.config:"
|
|
||||||
print line
|
|
||||||
sys.exit(1)
|
|
||||||
result[key] = value
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def create_build_ninja():
|
|
||||||
|
|
||||||
d=create_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 compile_irpf90
|
|
||||||
command = bash -c 'source .make.config.sh ; cd src ; {IRPF90} --ninja'
|
|
||||||
description = Compiling IRPF90
|
|
||||||
|
|
||||||
rule build_irpf90_a
|
|
||||||
command = {NINJA} -C src/IRPF90_temp && touch $out
|
|
||||||
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 ; python2 create_python.py
|
|
||||||
description = Building Python module
|
|
||||||
|
|
||||||
rule build_ocaml
|
|
||||||
command = cd src ; python2 create_ocaml.py
|
|
||||||
description = Building Ocaml module
|
|
||||||
|
|
||||||
build {irpf90_files}: compile_irpf90 | {irpf90_sources} {CONFIG_FILES}
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
"""
|
|
||||||
d["CONFIG_FILES"] = CONFIG_FILES
|
|
||||||
write_if_different('generated.ninja',template.format(**d))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
create_build_ninja()
|
|
@ -5,6 +5,6 @@ cd ../.git/hooks/
|
|||||||
|
|
||||||
for i in commit-msg post-commit
|
for i in commit-msg post-commit
|
||||||
do
|
do
|
||||||
rm $i
|
rm --force -- $i
|
||||||
ln -s $OLD_DIR/$i $PWD/$i
|
ln -s $OLD_DIR/$i $PWD/$i
|
||||||
done
|
done
|
||||||
|
9
make.config
Normal file
9
make.config
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
VERSION ?= 1.4.0
|
||||||
|
RANLIB ?= ranlib
|
||||||
|
IRPF90 ?= irpf90
|
||||||
|
CC ?= gcc
|
||||||
|
FC ?= gfortran -g -ffree-line-length-none -fPIC # -fopenmp
|
||||||
|
FCFLAGS ?= -fPIC
|
||||||
|
AR ?= ar
|
||||||
|
RANLIB ?= ranlib
|
||||||
|
PYTHON ?= python2
|
20
src/Makefile
20
src/Makefile
@ -29,7 +29,7 @@ export
|
|||||||
|
|
||||||
include irpf90.make
|
include irpf90.make
|
||||||
|
|
||||||
irpf90.make: $(wildcard *.irp.f) ../config/* system.c
|
irpf90.make: $(wildcard *.irp.f) ../config/* IRPF90_temp/system.o IRPF90_temp/system_f.o
|
||||||
$(IRPF90)
|
$(IRPF90)
|
||||||
|
|
||||||
include ../version
|
include ../version
|
||||||
@ -40,28 +40,30 @@ all: static ../Python/ezfio.py ../Ocaml/ezfio.ml
|
|||||||
|
|
||||||
static: ../lib/libezfio.a ../lib/libezfio_irp.a
|
static: ../lib/libezfio.a ../lib/libezfio_irp.a
|
||||||
|
|
||||||
system_c.o: system_c.c
|
IRPF90_temp/system.o: system.c
|
||||||
$(CC) -c system_c -o system_c.o
|
mkdir -p IRPF90_temp/
|
||||||
|
$(CC) -c system.c -o IRPF90_temp/system.o
|
||||||
|
|
||||||
system_f.o: system_f.f90
|
IRPF90_temp/system_f.o: system_f.f90
|
||||||
$(FC) -c system_f.f90 -o system_f.o
|
mkdir -p IRPF90_temp/
|
||||||
|
$(FC) -c system_f.f90 -o IRPF90_temp/system_f.o && cp system.mod IRPF90_temp/
|
||||||
|
|
||||||
../lib/libezfio.a: IRPF90_temp/irpf90.a
|
../lib/libezfio.a: IRPF90_temp/irpf90.a
|
||||||
rm -f ../lib/libezfio.a
|
rm -f ../lib/libezfio.a
|
||||||
$(AR) cru ../lib/libezfio.a system_c.o system_f.o $(OBJ1)
|
$(AR) cru ../lib/libezfio.a IRPF90_temp/system_f.o IRPF90_temp/system.o $(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
|
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 system_c.o system_f.o
|
$(AR) dv ../lib/libezfio_irp.a irp_stack.irp.o
|
||||||
$(RANLIB) ../lib/libezfio_irp.a
|
$(RANLIB) ../lib/libezfio_irp.a
|
||||||
|
|
||||||
|
|
||||||
../Python/ezfio.py: ../lib/libezfio.a
|
../Python/ezfio.py: ../lib/libezfio.a
|
||||||
python2 create_python.py
|
$(PYTHON) create_python.py
|
||||||
|
|
||||||
../Ocaml/ezfio.ml: ../lib/libezfio.a
|
../Ocaml/ezfio.ml: ../lib/libezfio.a
|
||||||
python2 create_ocaml.py
|
$(PYTHON) create_ocaml.py
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ subroutine ezfio_set_file(filename_in)
|
|||||||
|
|
||||||
character*(*) :: filename_in
|
character*(*) :: filename_in
|
||||||
character(8) :: date
|
character(8) :: date
|
||||||
character(10) :: time
|
character(73) :: time
|
||||||
character(32) :: user
|
character(32) :: user
|
||||||
|
|
||||||
if (filename_in == '') then
|
if (filename_in == '') then
|
||||||
@ -163,13 +163,13 @@ subroutine ezfio_set_file(filename_in)
|
|||||||
|
|
||||||
! using keyword arguments
|
! using keyword arguments
|
||||||
call date_and_time(DATE=date,TIME=time)
|
call date_and_time(DATE=date,TIME=time)
|
||||||
open (unit=10, file=trim(libezfio_filename)//'/ezfio/creation', ACTION='WRITE', STATUS='UNKNOWN')
|
open (unit=73, file=trim(libezfio_filename)//'/ezfio/creation', ACTION='WRITE', STATUS='UNKNOWN')
|
||||||
write(10,*), time, ' ', date
|
write(73,*) time, ' ', date
|
||||||
close(10)
|
close(73)
|
||||||
open (unit=10, file=trim(libezfio_filename)//'/ezfio/user', ACTION='WRITE', STATUS='UNKNOWN')
|
open (unit=73, file=trim(libezfio_filename)//'/ezfio/user', ACTION='WRITE', STATUS='UNKNOWN')
|
||||||
call getenv('USER',user)
|
call getenv('USER',user)
|
||||||
write(10,*) user
|
write(73,*) user
|
||||||
close(10)
|
close(73)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
TOUCH libezfio_filename
|
TOUCH libezfio_filename
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
! 31062 Toulouse Cedex 4
|
! 31062 Toulouse Cedex 4
|
||||||
! scemama@irsamc.ups-tlse.fr
|
! scemama@irsamc.ups-tlse.fr
|
||||||
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [ integer, PID ]
|
BEGIN_PROVIDER [ integer, PID ]
|
||||||
&BEGIN_PROVIDER [ character*(256), PID_str ]
|
&BEGIN_PROVIDER [ character*(256), PID_str ]
|
||||||
implicit none
|
implicit none
|
||||||
@ -64,7 +65,7 @@ subroutine ezfio_mkdir(path)
|
|||||||
call ezfio_error(irp_here,'Read-only file.')
|
call ezfio_error(irp_here,'Read-only file.')
|
||||||
endif
|
endif
|
||||||
if (.not.ezfio_exists(path)) then
|
if (.not.ezfio_exists(path)) then
|
||||||
call mkdir(trim(path))
|
call mkdir(trim(path)//char(0))
|
||||||
open(unit=libezfio_iunit,file=trim(path)//'/.version')
|
open(unit=libezfio_iunit,file=trim(path)//'/.version')
|
||||||
write(libezfio_iunit,'(A)') libezfio_version
|
write(libezfio_iunit,'(A)') libezfio_version
|
||||||
close(libezfio_iunit)
|
close(libezfio_iunit)
|
||||||
@ -73,6 +74,7 @@ end subroutine
|
|||||||
|
|
||||||
|
|
||||||
subroutine libezfio_openz(filename,mode,err)
|
subroutine libezfio_openz(filename,mode,err)
|
||||||
|
use system
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Opens a compressed file
|
! Opens a compressed file
|
||||||
@ -84,7 +86,7 @@ subroutine libezfio_openz(filename,mode,err)
|
|||||||
err=1
|
err=1
|
||||||
|
|
||||||
if (mode(1:1) == 'r') then
|
if (mode(1:1) == 'r') then
|
||||||
call system('zcat '//trim(filename)//' > '//trim(fifo))
|
call zcat(trim(filename)//char(0), trim(fifo)//char(0))
|
||||||
open(unit=libezfio_iunit,file=trim(fifo),form='FORMATTED',action='READ')
|
open(unit=libezfio_iunit,file=trim(fifo),form='FORMATTED',action='READ')
|
||||||
err=0
|
err=0
|
||||||
else if (mode(1:1) == 'w') then
|
else if (mode(1:1) == 'w') then
|
||||||
@ -118,6 +120,7 @@ subroutine libezfio_reopenz_unformatted(filename,mode,err)
|
|||||||
end
|
end
|
||||||
|
|
||||||
subroutine libezfio_closez(filename,mode)
|
subroutine libezfio_closez(filename,mode)
|
||||||
|
use system
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Closes a compressed file
|
! Closes a compressed file
|
||||||
@ -127,7 +130,7 @@ subroutine libezfio_closez(filename,mode)
|
|||||||
fifo = trim(filename)//'.'//trim(PID_str)
|
fifo = trim(filename)//'.'//trim(PID_str)
|
||||||
if (mode(1:1) == 'w') then
|
if (mode(1:1) == 'w') then
|
||||||
close(unit=libezfio_iunit)
|
close(unit=libezfio_iunit)
|
||||||
call system('gzip -c < '//trim(fifo)//' > '//trim(filename))
|
call gzip(trim(fifo)//char(0), trim(filename)//char(0))
|
||||||
open(unit=libezfio_iunit,file=trim(fifo),form='FORMATTED',action='WRITE')
|
open(unit=libezfio_iunit,file=trim(fifo),form='FORMATTED',action='WRITE')
|
||||||
endif
|
endif
|
||||||
close(unit=libezfio_iunit,status='DELETE')
|
close(unit=libezfio_iunit,status='DELETE')
|
||||||
|
45
src/system.c
Normal file
45
src/system.c
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include "zlib.h"
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void fortran_mkdir(char* filename) {
|
||||||
|
if (mkdir (filename, S_IRWXU)) {
|
||||||
|
perror (strerror (errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define BUFSIZE 16384
|
||||||
|
void gzip(char* filename, char* output) {
|
||||||
|
FILE* in = fopen(filename,"r");
|
||||||
|
gzFile out = gzopen(output,"w");
|
||||||
|
char buffer[BUFSIZE];
|
||||||
|
unsigned int size;
|
||||||
|
while (!feof(in)) {
|
||||||
|
size = (unsigned int) fread (buffer, sizeof(char), BUFSIZE, in);
|
||||||
|
gzwrite(out, buffer, size);
|
||||||
|
}
|
||||||
|
fclose(in);
|
||||||
|
gzclose(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
void zcat(char* filename, char* output) {
|
||||||
|
gzFile in = gzopen(filename,"r");
|
||||||
|
FILE* out = fopen(output,"w");
|
||||||
|
char buffer[BUFSIZE];
|
||||||
|
int size;
|
||||||
|
while (!gzeof(in)) {
|
||||||
|
size = gzread (in, buffer, BUFSIZE);
|
||||||
|
fwrite(buffer, sizeof(char), (size_t) size, out);
|
||||||
|
}
|
||||||
|
gzclose(in);
|
||||||
|
fclose(out);
|
||||||
|
}
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
|
|
||||||
void ezfio_mkdir(char* filename) {
|
|
||||||
errno = 0;
|
|
||||||
if (mkdir (filename, S_IRWXU)) {
|
|
||||||
perror (strerror (errno));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
MODULE system
|
module system
|
||||||
|
|
||||||
USE iso_c_binding
|
USE iso_c_binding
|
||||||
|
|
||||||
INTERFACE
|
INTERFACE
|
||||||
@ -7,6 +6,19 @@ MODULE system
|
|||||||
USE iso_c_binding
|
USE iso_c_binding
|
||||||
CHARACTER(kind=C_CHAR),INTENT(in) :: filename(*)
|
CHARACTER(kind=C_CHAR),INTENT(in) :: filename(*)
|
||||||
END SUBROUTINE
|
END SUBROUTINE
|
||||||
END INTERFACE
|
|
||||||
|
|
||||||
END MODULE
|
SUBROUTINE gzip(filename,output) BIND(C,name="gzip")
|
||||||
|
USE iso_c_binding
|
||||||
|
CHARACTER(kind=C_CHAR),INTENT(in) :: filename(*)
|
||||||
|
CHARACTER(kind=C_CHAR),INTENT(in) :: output(*)
|
||||||
|
END SUBROUTINE
|
||||||
|
|
||||||
|
SUBROUTINE zcat(filename,output) BIND(C,name="zcat")
|
||||||
|
USE iso_c_binding
|
||||||
|
CHARACTER(kind=C_CHAR),INTENT(in) :: filename(*)
|
||||||
|
CHARACTER(kind=C_CHAR),INTENT(in) :: output(*)
|
||||||
|
END SUBROUTINE
|
||||||
|
|
||||||
|
END INTERFACE
|
||||||
|
end module
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user