From c78ed73e7579dca58e262360a21f4b5ede6e53e0 Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Wed, 11 Nov 2009 08:39:43 +0000 Subject: [PATCH] Fortran2003 --- Makefile.am | 2 + Makefile.in | 9 +- aclocal.m4 | 1 + app/Makefile.in | 7 +- configure | 415 +++++++++++++++- configure.ac | 17 +- doc/tex/bib.tex | 6 - doc/tex/c_ref.tex | 1031 ++++++++++++++++++++++++++++----------- doc/tex/cdi_cman.tex | 31 +- doc/tex/cdi_fman.tex | 33 +- doc/tex/f_examples.tex | 22 +- doc/tex/f_link.tex | 29 ++ doc/tex/f_ref.tex | 1041 +++++++++++++++++++++++++++++----------- doc/tex/formats.tex | 19 +- doc/tex/makedoc | 9 +- doc/tex/makehtml | 13 +- examples/Makefile.am | 11 +- examples/Makefile.in | 31 +- src/Makefile.am | 36 +- src/Makefile.in | 68 ++- tests/Makefile.in | 7 +- 21 files changed, 2183 insertions(+), 655 deletions(-) diff --git a/Makefile.am b/Makefile.am index 76d8a83b7..c24036aaf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,4 +4,6 @@ SUBDIRS = src app examples tests # EXTRA_DIST=config/default doc/cdi_cman.pdf doc/cdi_fman.pdf src/cfortran.doc # +ACLOCAL_AMFLAGS = -I m4 +# CLEANFILES = `ls *~` diff --git a/Makefile.in b/Makefile.in index ad64f7506..631de7b6a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -39,8 +39,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ config/depcomp config/install-sh config/missing \ config/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ @@ -96,6 +96,8 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCMODEXT = @FCMODEXT@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ @@ -128,6 +130,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -182,6 +185,8 @@ SUBDIRS = src app examples tests # EXTRA_DIST = config/default doc/cdi_cman.pdf doc/cdi_fman.pdf src/cfortran.doc # +ACLOCAL_AMFLAGS = -I m4 +# CLEANFILES = `ls *~` all: all-recursive diff --git a/aclocal.m4 b/aclocal.m4 index fcc414d3d..2ce3c87fb 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -872,4 +872,5 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/acx_sl_mod_suffix.m4]) m4_include([acinclude.m4]) diff --git a/app/Makefile.in b/app/Makefile.in index afdaa91d9..51cee9165 100644 --- a/app/Makefile.in +++ b/app/Makefile.in @@ -38,8 +38,8 @@ noinst_PROGRAMS = createtable$(EXEEXT) subdir = app DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs @@ -90,6 +90,8 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCMODEXT = @FCMODEXT@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ @@ -122,6 +124,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ diff --git a/configure b/configure index e9b8df151..61e39905d 100755 --- a/configure +++ b/configure @@ -710,7 +710,12 @@ RANLIB CPP GREP EGREP +CREATE_ISOC_TRUE +CREATE_ISOC_FALSE FC +FCFLAGS +ac_ct_FC +FCMODEXT LIBOBJS LTLIBOBJS' ac_subst_files='' @@ -726,7 +731,10 @@ LIBS CPPFLAGS F77 FFLAGS -CPP' +CPP +FC +FCFLAGS +FCMODEXT' # Initialize some variables set by options. @@ -1311,6 +1319,10 @@ Optional Features: --enable-dependency-tracking do not reject slow dependency extractors --disable-largefile omit support for large files --enable-grib GRIB support [default=yes] + --enable-iso-c-interface + Create Fortran Interface via iso_c_bindings facility + of F2003 [default=no]. + --enable-dap Build OPeNDAP/DODS-enabled clients if possible [default=no] @@ -1355,6 +1367,9 @@ Some influential environment variables: F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags CPP C preprocessor + FC Fortran compiler command + FCFLAGS Fortran compiler flags + FCMODEXT file extension of compiled Fortran module files Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -6316,6 +6331,386 @@ echo $ECHO_N "checking for SERVICE support... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $with_service" >&5 echo "${ECHO_T}$with_service" >&6; } +# ---------------------------------------------------------------------- +# Create the Fortran Interface via iso_c_binding module (Fortran 2003 Standard) +# +# Check whether --enable-iso-c-interface was given. +if test "${enable_iso_c_interface+set}" = set; then + enableval=$enable_iso_c_interface; enable_isoc=${enableval} +else + enable_isoc=no +fi + + if test $enable_isoc = 'yes'; then + CREATE_ISOC_TRUE= + CREATE_ISOC_FALSE='#' +else + CREATE_ISOC_TRUE='#' + CREATE_ISOC_FALSE= +fi + +if test "${enable_isoc}" = "yes"; then + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + { echo "$as_me:$LINENO: result: $FC" >&5 +echo "${ECHO_T}$FC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_FC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + { echo "$as_me:$LINENO: result: $ac_ct_FC" >&5 +echo "${ECHO_T}$ac_ct_FC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_FC" && break +done + + if test "x$ac_ct_FC" = x; then + FC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + FC=$ac_ct_FC + fi +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for Fortran compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6; } +if test "${ac_cv_fc_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FCFLAGS+set} +ac_save_FFLAGS=$FCFLAGS +FCFLAGS= +{ echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5 +echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_fc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FCFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_fc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_fc_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_fc_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FCFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + FC=$F77 + +fi +# Check the module extension of the fortran compiler + +{ echo "$as_me:$LINENO: checking for suffix of module files" >&5 +echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6; } + + ac_fc_mod_uppercase=no + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF + + module conftest + implicit none + integer :: i + end module conftest + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + while :; do + acx_fc_mod_name= + if test -n "conftest.$FCMODEXT" -a -f "conftest.$FCMODEXT"; then + acx_fc_mod_name="conftest.$FCMODEXT" ; break +fi + + if test -n "conftest.mod" -a -f "conftest.mod"; then + acx_fc_mod_name="conftest.mod" ; break +fi + + if test -n "conftest.MOD" -a -f "conftest.MOD"; then + acx_fc_mod_name="conftest.MOD" ; break +fi + + if test -n "conftest.M" -a -f "conftest.M"; then + acx_fc_mod_name="conftest.M" ; break +fi + + if test -n "CONFTEST.MOD" -a -f "CONFTEST.MOD"; then + acx_fc_mod_name="CONFTEST.MOD" ; break +fi + + + break + done + rm -f conftest* + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + case "$acx_fc_mod_name" in + conftest.$FCMODEXT) : ;; + CONFTEST.$FCMODEXT) ac_fc_mod_uppercase=yes ;; + conftest.mod) FCMODEXT=mod ;; + conftest.MOD) FCMODEXT=MOD ;; + conftest.M) FCMODEXT=M ;; + CONFTEST.MOD) FCMODEXT=MOD + ac_fc_mod_uppercase=yes ;; +esac + + { echo "$as_me:$LINENO: result: ${FCMODEXT-not found}" >&5 +echo "${ECHO_T}${FCMODEXT-not found}" >&6; } + test "${FCMODEXT+set}" = set + if test $ac_fc_mod_uppercase = yes; then + { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5 +echo "$as_me: Fortran module filenames are uppercase." >&6;} +fi + + + + # ---------------------------------------------------------------------- # Compile interface with internal EXTRA library # @@ -7072,8 +7467,6 @@ fi -FC=$F77 - @@ -7190,6 +7583,13 @@ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${CREATE_ISOC_TRUE}" && test -z "${CREATE_ISOC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"CREATE_ISOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"CREATE_ISOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files @@ -7822,7 +8222,7 @@ RANLIB!$RANLIB$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim -FC!$FC$ac_delim +CREATE_ISOC_TRUE!$CREATE_ISOC_TRUE$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -7864,11 +8264,16 @@ _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +CREATE_ISOC_FALSE!$CREATE_ISOC_FALSE$ac_delim +FC!$FC$ac_delim +FCFLAGS!$FCFLAGS$ac_delim +ac_ct_FC!$ac_ct_FC$ac_delim +FCMODEXT!$FCMODEXT$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 2; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 7; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.ac b/configure.ac index e3e5d6eb1..f5b9ac4da 100644 --- a/configure.ac +++ b/configure.ac @@ -188,6 +188,22 @@ fi AC_MSG_CHECKING([for SERVICE support]) AC_MSG_RESULT($with_service) +# ---------------------------------------------------------------------- +# Create the Fortran Interface via iso_c_binding module (Fortran 2003 Standard) +# +AC_ARG_ENABLE(iso-c-interface, + AS_HELP_STRING([--enable-iso-c-interface], + [Create Fortran Interface via iso_c_bindings facility of F2003 [[default=no]]]). + ,enable_isoc=${enableval},enable_isoc=no) +AM_CONDITIONAL([CREATE_ISOC],[test $enable_isoc = 'yes']) +if test "${enable_isoc}" = "yes"; then + AC_PROG_FC +else + AC_SUBST([FC],$F77) +fi +# Check the module extension of the fortran compiler +ACX_SL_FC_MOD_SUFFIX(,[FCMODEXT=mod]) + # ---------------------------------------------------------------------- # Compile interface with internal EXTRA library # @@ -327,7 +343,6 @@ esac # Check C / Fortran interface UD_CHECK_CFINT([$srcdir/src/cfortran.h]) -AC_SUBST([FC],$F77) AC_SUBST([CFINT]) AC_SUBST([CPPFLAGS]) AC_SUBST([AR]) diff --git a/doc/tex/bib.tex b/doc/tex/bib.tex index ba9b305a7..293e1e3fb 100644 --- a/doc/tex/bib.tex +++ b/doc/tex/bib.tex @@ -1,6 +1,5 @@ \begin{thebibliography}{xx} -\label{ECHAM} \bibitem[ECHAM]{ECHAM} \ \\ \href{http://www.mpimet.mpg.de/wissenschaft/publikationen/reports.html} {The atmospheric general circulation model ECHAM5}, @@ -8,29 +7,24 @@ \href{http://www.mpimet.mpg.de} {Max Planck Institute for Meteorologie} -\label{GRIB} \bibitem[GRIB]{GRIB} \ \\ \href{http://www.wmo.ch/web/www/WMOCodes/Guides/GRIB/GRIB1-Contents.html} {GRIB version 1}, from the World Meteorological Organisation (\href{http://www.wmo.ch}{WMO}) -\label{NetCDF} \bibitem[NetCDF]{NetCDF} \ \\ \href{http://www.unidata.ucar.edu/packages/netcdf/index.html}{NetCDF Software Package}, from the \href{http://www.unidata.ucar.edu}{UNIDATA} Program Center of the University Corporation for Atmospheric Research -\label{MPIOM} \bibitem[MPIOM]{MPIOM} \ \\ The ocean model MPIOM, from the \href{http://www.mpimet.mpg.de} {Max Planck Institute for Meteorologie} - -\label{REMO} \bibitem[REMO]{REMO} \ \\ The regional climate model REMO, from the diff --git a/doc/tex/c_ref.tex b/doc/tex/c_ref.tex index 3f6bae1e6..dc510e7dc 100644 --- a/doc/tex/c_ref.tex +++ b/doc/tex/c_ref.tex @@ -1,939 +1,1412 @@ -\section*{\tt \htmlref{gridCreate}{gridCreate}} - +\section*{\tt +\ifpdf +\hyperref[gridCreate]{gridCreate} +\else +gridCreate +\fi +} \begin{verbatim} int gridCreate(int gridtype, int size); \end{verbatim} Create a horizontal Grid +\ifpdfoutput{}{(\ref{gridCreate})} -\section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXbounds]{gridDefXbounds} +\else +gridDefXbounds +\fi +} \begin{verbatim} void gridDefXbounds(int gridID, const double *xbounds); \end{verbatim} Define the bounds of a X-axis +\ifpdfoutput{}{(\ref{gridDefXbounds})} -\section*{\tt \htmlref{gridDefXlongname}{gridDefXlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXlongname]{gridDefXlongname} +\else +gridDefXlongname +\fi +} \begin{verbatim} void gridDefXlongname(int gridID, const char *longname); \end{verbatim} Define the longname of a X-axis +\ifpdfoutput{}{(\ref{gridDefXlongname})} -\section*{\tt \htmlref{gridDefXname}{gridDefXname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXname]{gridDefXname} +\else +gridDefXname +\fi +} \begin{verbatim} void gridDefXname(int gridID, const char *name); \end{verbatim} Define the name of a X-axis +\ifpdfoutput{}{(\ref{gridDefXname})} -\section*{\tt \htmlref{gridDefXsize}{gridDefXsize}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXsize]{gridDefXsize} +\else +gridDefXsize +\fi +} \begin{verbatim} void gridDefXsize(int gridID, int xsize); \end{verbatim} Define the number of values of a X-axis +\ifpdfoutput{}{(\ref{gridDefXsize})} -\section*{\tt \htmlref{gridDefXunits}{gridDefXunits}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXunits]{gridDefXunits} +\else +gridDefXunits +\fi +} \begin{verbatim} void gridDefXunits(int gridID, const char *units); \end{verbatim} Define the units of a X-axis +\ifpdfoutput{}{(\ref{gridDefXunits})} -\section*{\tt \htmlref{gridDefXvals}{gridDefXvals}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXvals]{gridDefXvals} +\else +gridDefXvals +\fi +} \begin{verbatim} void gridDefXvals(int gridID, const double *xvals); \end{verbatim} Define the values of a X-axis +\ifpdfoutput{}{(\ref{gridDefXvals})} -\section*{\tt \htmlref{gridDefYbounds}{gridDefYbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYbounds]{gridDefYbounds} +\else +gridDefYbounds +\fi +} \begin{verbatim} void gridDefYbounds(int gridID, const double *ybounds); \end{verbatim} Define the bounds of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYbounds})} -\section*{\tt \htmlref{gridDefYlongname}{gridDefYlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYlongname]{gridDefYlongname} +\else +gridDefYlongname +\fi +} \begin{verbatim} void gridDefYlongname(int gridID, const char *longname); \end{verbatim} Define the longname of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYlongname})} -\section*{\tt \htmlref{gridDefYname}{gridDefYname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYname]{gridDefYname} +\else +gridDefYname +\fi +} \begin{verbatim} void gridDefYname(int gridID, const char *name); \end{verbatim} Define the name of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYname})} -\section*{\tt \htmlref{gridDefYsize}{gridDefYsize}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYsize]{gridDefYsize} +\else +gridDefYsize +\fi +} \begin{verbatim} void gridDefYsize(int gridID, int ysize); \end{verbatim} Define the number of values of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYsize})} -\section*{\tt \htmlref{gridDefYunits}{gridDefYunits}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYunits]{gridDefYunits} +\else +gridDefYunits +\fi +} \begin{verbatim} void gridDefYunits(int gridID, const char *units); \end{verbatim} Define the units of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYunits})} -\section*{\tt \htmlref{gridDefYvals}{gridDefYvals}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYvals]{gridDefYvals} +\else +gridDefYvals +\fi +} \begin{verbatim} void gridDefYvals(int gridID, const double *yvals); \end{verbatim} Define the values of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYvals})} -\section*{\tt \htmlref{gridDestroy}{gridDestroy}} - +\section*{\tt +\ifpdf +\hyperref[gridDestroy]{gridDestroy} +\else +gridDestroy +\fi +} \begin{verbatim} void gridDestroy(int gridID); \end{verbatim} Destroy a horizontal Grid +\ifpdfoutput{}{(\ref{gridDestroy})} -\section*{\tt \htmlref{gridDuplicate}{gridDuplicate}} - +\section*{\tt +\ifpdf +\hyperref[gridDuplicate]{gridDuplicate} +\else +gridDuplicate +\fi +} \begin{verbatim} int gridDuplicate(int gridID); \end{verbatim} Duplicate a horizontal Grid +\ifpdfoutput{}{(\ref{gridDuplicate})} -\section*{\tt \htmlref{gridInqSize}{gridInqSize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqSize]{gridInqSize} +\else +gridInqSize +\fi +} \begin{verbatim} int gridInqSize(int gridID); \end{verbatim} Get the size of a Grid +\ifpdfoutput{}{(\ref{gridInqSize})} -\section*{\tt \htmlref{gridInqType}{gridInqType}} - +\section*{\tt +\ifpdf +\hyperref[gridInqType]{gridInqType} +\else +gridInqType +\fi +} \begin{verbatim} int gridInqType(int gridID); \end{verbatim} Get the type of a Grid +\ifpdfoutput{}{(\ref{gridInqType})} -\section*{\tt \htmlref{gridInqXbounds}{gridInqXbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXbounds]{gridInqXbounds} +\else +gridInqXbounds +\fi +} \begin{verbatim} int gridInqXbounds(int gridID, double *xbounds); \end{verbatim} Get the bounds of a X-axis +\ifpdfoutput{}{(\ref{gridInqXbounds})} -\section*{\tt \htmlref{gridInqXlongname}{gridInqXlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXlongname]{gridInqXlongname} +\else +gridInqXlongname +\fi +} \begin{verbatim} void gridInqXlongname(int gridID, const char *longname); \end{verbatim} Get the longname of a X-axis +\ifpdfoutput{}{(\ref{gridInqXlongname})} -\section*{\tt \htmlref{gridInqXname}{gridInqXname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXname]{gridInqXname} +\else +gridInqXname +\fi +} \begin{verbatim} void gridInqXname(int gridID, const char *name); \end{verbatim} Get the name of a X-axis +\ifpdfoutput{}{(\ref{gridInqXname})} -\section*{\tt \htmlref{gridInqXsize}{gridInqXsize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXsize]{gridInqXsize} +\else +gridInqXsize +\fi +} \begin{verbatim} void gridInqXsize(int gridID); \end{verbatim} Get the number of values of a X-axis +\ifpdfoutput{}{(\ref{gridInqXsize})} -\section*{\tt \htmlref{gridInqXunits}{gridInqXunits}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXunits]{gridInqXunits} +\else +gridInqXunits +\fi +} \begin{verbatim} void gridInqXunits(int gridID, const char *units); \end{verbatim} Get the units of a X-axis +\ifpdfoutput{}{(\ref{gridInqXunits})} -\section*{\tt \htmlref{gridInqXvals}{gridInqXvals}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXvals]{gridInqXvals} +\else +gridInqXvals +\fi +} \begin{verbatim} int gridInqXvals(int gridID, double *xvals); \end{verbatim} Get all values of a X-axis +\ifpdfoutput{}{(\ref{gridInqXvals})} -\section*{\tt \htmlref{gridInqYbounds}{gridInqYbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYbounds]{gridInqYbounds} +\else +gridInqYbounds +\fi +} \begin{verbatim} int gridInqYbounds(int gridID, double *ybounds); \end{verbatim} Get the bounds of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYbounds})} -\section*{\tt \htmlref{gridInqYlongname}{gridInqYlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYlongname]{gridInqYlongname} +\else +gridInqYlongname +\fi +} \begin{verbatim} void gridInqXlongname(int gridID, const char *longname); \end{verbatim} Get the longname of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYlongname})} -\section*{\tt \htmlref{gridInqYname}{gridInqYname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYname]{gridInqYname} +\else +gridInqYname +\fi +} \begin{verbatim} void gridInqYname(int gridID, const char *name); \end{verbatim} Get the name of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYname})} -\section*{\tt \htmlref{gridInqYsize}{gridInqYsize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYsize]{gridInqYsize} +\else +gridInqYsize +\fi +} \begin{verbatim} void gridInqYsize(int gridID); \end{verbatim} Get the number of values of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYsize})} -\section*{\tt \htmlref{gridInqYunits}{gridInqYunits}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYunits]{gridInqYunits} +\else +gridInqYunits +\fi +} \begin{verbatim} void gridInqYunits(int gridID, const char *units); \end{verbatim} Get the units of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYunits})} -\section*{\tt \htmlref{gridInqYvals}{gridInqYvals}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYvals]{gridInqYvals} +\else +gridInqYvals +\fi +} \begin{verbatim} int gridInqYvals(int gridID, double *yvals); \end{verbatim} Get all values of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYvals})} -\section*{\tt \htmlref{streamClose}{streamClose}} - +\section*{\tt +\ifpdf +\hyperref[streamClose]{streamClose} +\else +streamClose +\fi +} \begin{verbatim} void streamClose(int streamID); \end{verbatim} Close an open dataset +\ifpdfoutput{}{(\ref{streamClose})} -\section*{\tt \htmlref{streamDefByteorder}{streamDefByteorder}} - +\section*{\tt +\ifpdf +\hyperref[streamDefByteorder]{streamDefByteorder} +\else +streamDefByteorder +\fi +} \begin{verbatim} void streamDefByteorder(int streamID, int byteorder); \end{verbatim} Define the byte order +\ifpdfoutput{}{(\ref{streamDefByteorder})} -\section*{\tt \htmlref{streamDefTimestep}{streamDefTimestep}} - +\section*{\tt +\ifpdf +\hyperref[streamDefTimestep]{streamDefTimestep} +\else +streamDefTimestep +\fi +} \begin{verbatim} int streamDefTimestep(int streamID, int tsID); \end{verbatim} Define time step +\ifpdfoutput{}{(\ref{streamDefTimestep})} -\section*{\tt \htmlref{streamDefVlist}{streamDefVlist}} - +\section*{\tt +\ifpdf +\hyperref[streamDefVlist]{streamDefVlist} +\else +streamDefVlist +\fi +} \begin{verbatim} void streamDefVlist(int streamID, int vlistID); \end{verbatim} Define the variable list +\ifpdfoutput{}{(\ref{streamDefVlist})} -\section*{\tt \htmlref{streamInqByteorder}{streamInqByteorder}} - +\section*{\tt +\ifpdf +\hyperref[streamInqByteorder]{streamInqByteorder} +\else +streamInqByteorder +\fi +} \begin{verbatim} int streamInqByteorder(int streamID); \end{verbatim} Get the byte order +\ifpdfoutput{}{(\ref{streamInqByteorder})} -\section*{\tt \htmlref{streamInqFiletype}{streamInqFiletype}} - +\section*{\tt +\ifpdf +\hyperref[streamInqFiletype]{streamInqFiletype} +\else +streamInqFiletype +\fi +} \begin{verbatim} int streamInqFiletype(int streamID); \end{verbatim} Get the filetype +\ifpdfoutput{}{(\ref{streamInqFiletype})} -\section*{\tt \htmlref{streamInqTimestep}{streamInqTimestep}} - +\section*{\tt +\ifpdf +\hyperref[streamInqTimestep]{streamInqTimestep} +\else +streamInqTimestep +\fi +} \begin{verbatim} int streamInqTimestep(int streamID, int tsID); \end{verbatim} Get time step +\ifpdfoutput{}{(\ref{streamInqTimestep})} -\section*{\tt \htmlref{streamInqVlist}{streamInqVlist}} - +\section*{\tt +\ifpdf +\hyperref[streamInqVlist]{streamInqVlist} +\else +streamInqVlist +\fi +} \begin{verbatim} int streamInqVlist(int streamID); \end{verbatim} Get the variable list +\ifpdfoutput{}{(\ref{streamInqVlist})} -\section*{\tt \htmlref{streamOpenRead}{streamOpenRead}} - +\section*{\tt +\ifpdf +\hyperref[streamOpenRead]{streamOpenRead} +\else +streamOpenRead +\fi +} \begin{verbatim} int streamOpenRead(const char *path); \end{verbatim} Open a dataset for reading +\ifpdfoutput{}{(\ref{streamOpenRead})} -\section*{\tt \htmlref{streamOpenWrite}{streamOpenWrite}} - +\section*{\tt +\ifpdf +\hyperref[streamOpenWrite]{streamOpenWrite} +\else +streamOpenWrite +\fi +} \begin{verbatim} int streamOpenWrite(const char *path, int filetype); \end{verbatim} Create a new dataset +\ifpdfoutput{}{(\ref{streamOpenWrite})} -\section*{\tt \htmlref{streamReadVar}{streamReadVar}} - +\section*{\tt +\ifpdf +\hyperref[streamReadVar]{streamReadVar} +\else +streamReadVar +\fi +} \begin{verbatim} void streamReadVar(int streamID, int varID, double *data, int *nmiss); \end{verbatim} Read a variable +\ifpdfoutput{}{(\ref{streamReadVar})} -\section*{\tt \htmlref{streamReadVarSlice}{streamReadVarSlice}} - +\section*{\tt +\ifpdf +\hyperref[streamReadVarSlice]{streamReadVarSlice} +\else +streamReadVarSlice +\fi +} \begin{verbatim} void streamReadVarSlice(int streamID, int varID, int levelID, double *data, int *nmiss); \end{verbatim} Read a horizontal slice of a variable +\ifpdfoutput{}{(\ref{streamReadVarSlice})} -\section*{\tt \htmlref{streamWriteVar}{streamWriteVar}} - +\section*{\tt +\ifpdf +\hyperref[streamWriteVar]{streamWriteVar} +\else +streamWriteVar +\fi +} \begin{verbatim} void streamWriteVar(int streamID, int varID, const double *data, int nmiss); \end{verbatim} Write a variable +\ifpdfoutput{}{(\ref{streamWriteVar})} -\section*{\tt \htmlref{streamWriteVarSlice}{streamWriteVarSlice}} - +\section*{\tt +\ifpdf +\hyperref[streamWriteVarSlice]{streamWriteVarSlice} +\else +streamWriteVarSlice +\fi +} \begin{verbatim} void streamWriteVarSlice(int streamID, int varID, int levelID, const double *data, int nmiss); \end{verbatim} Write a horizontal slice of a variable +\ifpdfoutput{}{(\ref{streamWriteVarSlice})} -\section*{\tt \htmlref{taxisCreate}{taxisCreate}} - +\section*{\tt +\ifpdf +\hyperref[taxisCreate]{taxisCreate} +\else +taxisCreate +\fi +} \begin{verbatim} int taxisCreate(int taxistype); \end{verbatim} Create a Time axis +\ifpdfoutput{}{(\ref{taxisCreate})} -\section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefCalendar]{taxisDefCalendar} +\else +taxisDefCalendar +\fi +} \begin{verbatim} void taxisDefCalendar(int taxisID, int calendar); \end{verbatim} Define the calendar +\ifpdfoutput{}{(\ref{taxisDefCalendar})} -\section*{\tt \htmlref{taxisDefRdate}{taxisDefRdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefRdate]{taxisDefRdate} +\else +taxisDefRdate +\fi +} \begin{verbatim} void taxisDefRdate(int taxisID, int rdate); \end{verbatim} Define the reference date +\ifpdfoutput{}{(\ref{taxisDefRdate})} -\section*{\tt \htmlref{taxisDefRtime}{taxisDefRtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefRtime]{taxisDefRtime} +\else +taxisDefRtime +\fi +} \begin{verbatim} void taxisDefRtime(int taxisID, int rtime); \end{verbatim} Define the reference time +\ifpdfoutput{}{(\ref{taxisDefRtime})} -\section*{\tt \htmlref{taxisDefVdate}{taxisDefVdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefVdate]{taxisDefVdate} +\else +taxisDefVdate +\fi +} \begin{verbatim} void taxisDefVdate(int taxisID, int vdate); \end{verbatim} Define the verification date +\ifpdfoutput{}{(\ref{taxisDefVdate})} -\section*{\tt \htmlref{taxisDefVtime}{taxisDefVtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefVtime]{taxisDefVtime} +\else +taxisDefVtime +\fi +} \begin{verbatim} void taxisDefVtime(int taxisID, int vtime); \end{verbatim} Define the verification time +\ifpdfoutput{}{(\ref{taxisDefVtime})} -\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}} - +\section*{\tt +\ifpdf +\hyperref[taxisDestroy]{taxisDestroy} +\else +taxisDestroy +\fi +} \begin{verbatim} void taxisDestroy(int taxisID); \end{verbatim} Destroy a Time axis +\ifpdfoutput{}{(\ref{taxisDestroy})} -\section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqCalendar]{taxisInqCalendar} +\else +taxisInqCalendar +\fi +} \begin{verbatim} int taxisInqCalendar(int taxisID); \end{verbatim} Get the calendar +\ifpdfoutput{}{(\ref{taxisInqCalendar})} -\section*{\tt \htmlref{taxisInqRdate}{taxisInqRdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqRdate]{taxisInqRdate} +\else +taxisInqRdate +\fi +} \begin{verbatim} int taxisInqRdate(int taxisID); \end{verbatim} Get the reference date +\ifpdfoutput{}{(\ref{taxisInqRdate})} -\section*{\tt \htmlref{taxisInqRtime}{taxisInqRtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqRtime]{taxisInqRtime} +\else +taxisInqRtime +\fi +} \begin{verbatim} int taxisInqRtime(int taxisID); \end{verbatim} Get the reference time +\ifpdfoutput{}{(\ref{taxisInqRtime})} -\section*{\tt \htmlref{taxisInqVdate}{taxisInqVdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqVdate]{taxisInqVdate} +\else +taxisInqVdate +\fi +} \begin{verbatim} int taxisInqVdate(int taxisID); \end{verbatim} Get the verification date +\ifpdfoutput{}{(\ref{taxisInqVdate})} -\section*{\tt \htmlref{taxisInqVtime}{taxisInqVtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqVtime]{taxisInqVtime} +\else +taxisInqVtime +\fi +} \begin{verbatim} int taxisInqVtime(int taxisID); \end{verbatim} Get the verification time +\ifpdfoutput{}{(\ref{taxisInqVtime})} -\section*{\tt \htmlref{vlistCat}{vlistCat}} - +\section*{\tt +\ifpdf +\hyperref[vlistCat]{vlistCat} +\else +vlistCat +\fi +} \begin{verbatim} void vlistCat(int vlistID2, int vlistID1); \end{verbatim} Concatenate two variable lists +\ifpdfoutput{}{(\ref{vlistCat})} -\section*{\tt \htmlref{vlistCopy}{vlistCopy}} - +\section*{\tt +\ifpdf +\hyperref[vlistCopy]{vlistCopy} +\else +vlistCopy +\fi +} \begin{verbatim} void vlistCopy(int vlistID2, int vlistID1); \end{verbatim} Copy a variable list +\ifpdfoutput{}{(\ref{vlistCopy})} -\section*{\tt \htmlref{vlistCopyFlag}{vlistCopyFlag}} - +\section*{\tt +\ifpdf +\hyperref[vlistCopyFlag]{vlistCopyFlag} +\else +vlistCopyFlag +\fi +} \begin{verbatim} void vlistCopyFlag(int vlistID2, int vlistID1); \end{verbatim} Copy some entries of a variable list +\ifpdfoutput{}{(\ref{vlistCopyFlag})} -\section*{\tt \htmlref{vlistCreate}{vlistCreate}} - +\section*{\tt +\ifpdf +\hyperref[vlistCreate]{vlistCreate} +\else +vlistCreate +\fi +} \begin{verbatim} int vlistCreate(void); \end{verbatim} Create a variable list +\ifpdfoutput{}{(\ref{vlistCreate})} -\section*{\tt \htmlref{vlistDefAttFlt}{vlistDefAttFlt}} - -\begin{verbatim} - int vlistDefAttFlt(int vlistID, int varID, const char *name, int len, - const double *dp); -\end{verbatim} - -Define a floating point attribute - - -\section*{\tt \htmlref{vlistDefAttInt}{vlistDefAttInt}} - -\begin{verbatim} - int vlistDefAttInt(int vlistID, int varID, const char *name, int len, const int *ip); -\end{verbatim} - -Define an integer attribute - - -\section*{\tt \htmlref{vlistDefAttTxt}{vlistDefAttTxt}} - -\begin{verbatim} - int vlistDefAttTxt(int vlistID, int varID, const char *name, int len, const char *tp); -\end{verbatim} - -Define a text attribute - - -\section*{\tt \htmlref{vlistDefTaxis}{vlistDefTaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefTaxis]{vlistDefTaxis} +\else +vlistDefTaxis +\fi +} \begin{verbatim} void vlistDefTaxis(int vlistID, int taxisID); \end{verbatim} Define the time axis +\ifpdfoutput{}{(\ref{vlistDefTaxis})} -\section*{\tt \htmlref{vlistDefVar}{vlistDefVar}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVar]{vlistDefVar} +\else +vlistDefVar +\fi +} \begin{verbatim} int vlistDefVar(int vlistID, int gridID, int zaxisID, int timeID); \end{verbatim} Define a Variable +\ifpdfoutput{}{(\ref{vlistDefVar})} -\section*{\tt \htmlref{vlistDefVarCode}{vlistDefVarCode}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarCode]{vlistDefVarCode} +\else +vlistDefVarCode +\fi +} \begin{verbatim} void vlistDefVarCode(int vlistID, int varID, int code); \end{verbatim} Define the code number of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarCode})} -\section*{\tt \htmlref{vlistDefVarDatatype}{vlistDefVarDatatype}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarDatatype]{vlistDefVarDatatype} +\else +vlistDefVarDatatype +\fi +} \begin{verbatim} void vlistDefVarDatatype(int vlistID, int varID, int datatype); \end{verbatim} Define the data type of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarDatatype})} -\section*{\tt \htmlref{vlistDefVarLongname}{vlistDefVarLongname}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarLongname]{vlistDefVarLongname} +\else +vlistDefVarLongname +\fi +} \begin{verbatim} void vlistDefVarLongname(int vlistID, int varID, const char *longname); \end{verbatim} Define the long name of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarLongname})} -\section*{\tt \htmlref{vlistDefVarMissval}{vlistDefVarMissval}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarMissval]{vlistDefVarMissval} +\else +vlistDefVarMissval +\fi +} \begin{verbatim} void vlistDefVarMissval(int vlistID, int varID, double missval); \end{verbatim} Define the missing value of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarMissval})} -\section*{\tt \htmlref{vlistDefVarName}{vlistDefVarName}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarName]{vlistDefVarName} +\else +vlistDefVarName +\fi +} \begin{verbatim} void vlistDefVarName(int vlistID, int varID, const char *name); \end{verbatim} Define the name of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarName})} -\section*{\tt \htmlref{vlistDefVarStdname}{vlistDefVarStdname}} - -\begin{verbatim} - void vlistDefVarStdname(int vlistID, int varID, const char *stdname); -\end{verbatim} - -Define the standard name of a Variable - - -\section*{\tt \htmlref{vlistDefVarUnits}{vlistDefVarUnits}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarUnits]{vlistDefVarUnits} +\else +vlistDefVarUnits +\fi +} \begin{verbatim} void vlistDefVarUnits(int vlistID, int varID, const char *units); \end{verbatim} Define the units of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarUnits})} -\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}} - +\section*{\tt +\ifpdf +\hyperref[vlistDestroy]{vlistDestroy} +\else +vlistDestroy +\fi +} \begin{verbatim} void vlistDestroy(int vlistID); \end{verbatim} Destroy a variable list +\ifpdfoutput{}{(\ref{vlistDestroy})} -\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}} - +\section*{\tt +\ifpdf +\hyperref[vlistDuplicate]{vlistDuplicate} +\else +vlistDuplicate +\fi +} \begin{verbatim} int vlistDuplicate(int vlistID); \end{verbatim} Duplicate a variable list +\ifpdfoutput{}{(\ref{vlistDuplicate})} -\section*{\tt \htmlref{vlistInqAtt}{vlistInqAtt}} - -\begin{verbatim} - int vlistInqAtt(int vlistID, int varID, int attnum, char *name, int *typep, int *lenp); -\end{verbatim} - -Get information about an attribute - - -\section*{\tt \htmlref{vlistInqAttFlt}{vlistInqAttFlt}} - -\begin{verbatim} - int vlistInqAttFlt(int vlistID, int varID, const char *name, int mlen, int *dp); -\end{verbatim} - -Get the value(s) of a floating point attribute - - -\section*{\tt \htmlref{vlistInqAttInt}{vlistInqAttInt}} - -\begin{verbatim} - int vlistInqAttInt(int vlistID, int varID, const char *name, int mlen, int *ip); -\end{verbatim} - -Get the value(s) of an integer attribute - - -\section*{\tt \htmlref{vlistInqAttTxt}{vlistInqAttTxt}} - -\begin{verbatim} - int vlistInqAttTxt(int vlistID, int varID, const char *name, int mlen, int *tp); -\end{verbatim} - -Get the value(s) of a text attribute - - -\section*{\tt \htmlref{vlistInqNatts}{vlistInqNatts}} - -\begin{verbatim} - int vlistInqNatts(int vlistID, int varID, int *nattsp); -\end{verbatim} - -Get number of variable attributes - - -\section*{\tt \htmlref{vlistInqTaxis}{vlistInqTaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqTaxis]{vlistInqTaxis} +\else +vlistInqTaxis +\fi +} \begin{verbatim} int vlistInqTaxis(int vlistID); \end{verbatim} Get the time axis +\ifpdfoutput{}{(\ref{vlistInqTaxis})} -\section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarCode]{vlistInqVarCode} +\else +vlistInqVarCode +\fi +} \begin{verbatim} int vlistInqVarCode(int vlistID, int varID); \end{verbatim} Get the Code number of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarCode})} -\section*{\tt \htmlref{vlistInqVarDatatype}{vlistInqVarDatatype}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarDatatype]{vlistInqVarDatatype} +\else +vlistInqVarDatatype +\fi +} \begin{verbatim} int vlistInqVarDatatype(int vlistID, int varID); \end{verbatim} Get the data type of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarDatatype})} -\section*{\tt \htmlref{vlistInqVarGrid}{vlistInqVarGrid}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarGrid]{vlistInqVarGrid} +\else +vlistInqVarGrid +\fi +} \begin{verbatim} int vlistInqVarGrid(int vlistID, int varID); \end{verbatim} Get the Grid ID of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarGrid})} -\section*{\tt \htmlref{vlistInqVarLongname}{vlistInqVarLongname}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarLongname]{vlistInqVarLongname} +\else +vlistInqVarLongname +\fi +} \begin{verbatim} void vlistInqVarLongname(int vlistID, int varID, char *longname); \end{verbatim} Get the longname of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarLongname})} -\section*{\tt \htmlref{vlistInqVarMissval}{vlistInqVarMissval}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarMissval]{vlistInqVarMissval} +\else +vlistInqVarMissval +\fi +} \begin{verbatim} double vlistInqVarMissval(int vlistID, int varID); \end{verbatim} Get the missing value of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarMissval})} -\section*{\tt \htmlref{vlistInqVarName}{vlistInqVarName}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarName]{vlistInqVarName} +\else +vlistInqVarName +\fi +} \begin{verbatim} void vlistInqVarName(int vlistID, int varID, char *name); \end{verbatim} Get the name of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarName})} -\section*{\tt \htmlref{vlistInqVarStdname}{vlistInqVarStdname}} - -\begin{verbatim} - void vlistInqVarStdname(int vlistID, int varID, char *stdname); -\end{verbatim} - -Get the standard name of a Variable - - -\section*{\tt \htmlref{vlistInqVarUnits}{vlistInqVarUnits}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarUnits]{vlistInqVarUnits} +\else +vlistInqVarUnits +\fi +} \begin{verbatim} void vlistInqVarUnits(int vlistID, int varID, char *units); \end{verbatim} Get the units of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarUnits})} -\section*{\tt \htmlref{vlistInqVarZaxis}{vlistInqVarZaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarZaxis]{vlistInqVarZaxis} +\else +vlistInqVarZaxis +\fi +} \begin{verbatim} int vlistInqVarZaxis(int vlistID, int varID); \end{verbatim} Get the Zaxis ID of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarZaxis})} -\section*{\tt \htmlref{vlistNgrids}{vlistNgrids}} - +\section*{\tt +\ifpdf +\hyperref[vlistNgrids]{vlistNgrids} +\else +vlistNgrids +\fi +} \begin{verbatim} int vlistNgrids(int vlistID); \end{verbatim} Number of grids in a variable list +\ifpdfoutput{}{(\ref{vlistNgrids})} -\section*{\tt \htmlref{vlistNvars}{vlistNvars}} - +\section*{\tt +\ifpdf +\hyperref[vlistNvars]{vlistNvars} +\else +vlistNvars +\fi +} \begin{verbatim} int vlistNvars(int vlistID); \end{verbatim} Number of variables in a variable list +\ifpdfoutput{}{(\ref{vlistNvars})} -\section*{\tt \htmlref{vlistNzaxis}{vlistNzaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistNzaxis]{vlistNzaxis} +\else +vlistNzaxis +\fi +} \begin{verbatim} int vlistNzaxis(int vlistID); \end{verbatim} Number of zaxis in a variable list +\ifpdfoutput{}{(\ref{vlistNzaxis})} -\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}} - +\section*{\tt +\ifpdf +\hyperref[zaxisCreate]{zaxisCreate} +\else +zaxisCreate +\fi +} \begin{verbatim} int zaxisCreate(int zaxistype, int size); \end{verbatim} Create a vertical Z-axis +\ifpdfoutput{}{(\ref{zaxisCreate})} -\section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefLevels]{zaxisDefLevels} +\else +zaxisDefLevels +\fi +} \begin{verbatim} void zaxisDefLevels(int zaxisID, const double *levels); \end{verbatim} Define the levels of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefLevels})} -\section*{\tt \htmlref{zaxisDefLongname}{zaxisDefLongname}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefLongname]{zaxisDefLongname} +\else +zaxisDefLongname +\fi +} \begin{verbatim} void zaxisDefLongname(int zaxisID, const char *longname); \end{verbatim} Define the longname of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefLongname})} -\section*{\tt \htmlref{zaxisDefName}{zaxisDefName}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefName]{zaxisDefName} +\else +zaxisDefName +\fi +} \begin{verbatim} void zaxisDefName(int zaxisID, const char *name); \end{verbatim} Define the name of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefName})} -\section*{\tt \htmlref{zaxisDefUnits}{zaxisDefUnits}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefUnits]{zaxisDefUnits} +\else +zaxisDefUnits +\fi +} \begin{verbatim} void zaxisDefUnits(int zaxisID, const char *units); \end{verbatim} Define the units of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefUnits})} -\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDestroy]{zaxisDestroy} +\else +zaxisDestroy +\fi +} \begin{verbatim} void zaxisDestroy(int zaxisID); \end{verbatim} Destroy a vertical Z-axis +\ifpdfoutput{}{(\ref{zaxisDestroy})} -\section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLevel]{zaxisInqLevel} +\else +zaxisInqLevel +\fi +} \begin{verbatim} double zaxisInqLevel(int zaxisID, int levelID); \end{verbatim} Get one level of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLevel})} -\section*{\tt \htmlref{zaxisInqLevels}{zaxisInqLevels}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLevels]{zaxisInqLevels} +\else +zaxisInqLevels +\fi +} \begin{verbatim} void zaxisInqLevels(int zaxisID, double *levels); \end{verbatim} Get all levels of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLevels})} -\section*{\tt \htmlref{zaxisInqLongname}{zaxisInqLongname}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLongname]{zaxisInqLongname} +\else +zaxisInqLongname +\fi +} \begin{verbatim} void zaxisInqLongname(int zaxisID, char *longname); \end{verbatim} Get the longname of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLongname})} -\section*{\tt \htmlref{zaxisInqName}{zaxisInqName}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqName]{zaxisInqName} +\else +zaxisInqName +\fi +} \begin{verbatim} void zaxisInqName(int zaxisID, char *name); \end{verbatim} Get the name of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqName})} -\section*{\tt \htmlref{zaxisInqSize}{zaxisInqSize}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqSize]{zaxisInqSize} +\else +zaxisInqSize +\fi +} \begin{verbatim} int zaxisInqSize(int zaxisID); \end{verbatim} Get the size of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqSize})} -\section*{\tt \htmlref{zaxisInqType}{zaxisInqType}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqType]{zaxisInqType} +\else +zaxisInqType +\fi +} \begin{verbatim} int zaxisInqType(int zaxisID); \end{verbatim} Get the type of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqType})} -\section*{\tt \htmlref{zaxisInqUnits}{zaxisInqUnits}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqUnits]{zaxisInqUnits} +\else +zaxisInqUnits +\fi +} \begin{verbatim} void zaxisInqUnits(int zaxisID, char *units); \end{verbatim} Get the units of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqUnits})} diff --git a/doc/tex/cdi_cman.tex b/doc/tex/cdi_cman.tex index 23e24facd..33e610abe 100644 --- a/doc/tex/cdi_cman.tex +++ b/doc/tex/cdi_cman.tex @@ -1,6 +1,27 @@ \documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn,twoside]{scrreprt} % for pdf output %\documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn]{report} % for pdf output +% To allow automatic selection of the right graphics type ... +% preset \pdfoutput for older latex installation, it is allways definted for +% news ones +\ifx\pdfoutput\undefined +\gdef\pdfoutput{0} +\fi + +\newif\ifpdf +\ifnum\pdfoutput=0 +% latex is called for dvi output + \pdffalse + \usepackage{graphics} + \usepackage{hyperref} +\else +% pdflatex is called for pdf output + \pdftrue + \usepackage[pdftex]{graphicx} + \usepackage[pdftex]{hyperref} +\fi + +\setlength{\parindent}{0pt} \usepackage{graphics} \newcommand{\CDI}{\bfseries\sffamily CDI} @@ -50,16 +71,6 @@ %dvipdf %pdflatex -% To allow automatic selection of the right graphics type ... - -\newif\ifpdf -\ifx\pdfoutput\undefined - \pdffalse % LaTeX -\else - \pdfoutput=1 % PDFLaTeX - \pdftrue -\fi - \usepackage{thumbpdf} %\usepackage{html} diff --git a/doc/tex/cdi_fman.tex b/doc/tex/cdi_fman.tex index 9e54f8792..6699f1eee 100644 --- a/doc/tex/cdi_fman.tex +++ b/doc/tex/cdi_fman.tex @@ -1,8 +1,27 @@ \documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn,twoside]{scrreprt} % for pdf output %\documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn]{report} % for pdf output -\usepackage{graphics} +% To allow automatic selection of the right graphics type ... +% preset \pdfoutput for older latex installation, it is allways definted for +% news ones +\ifx\pdfoutput\undefined +\gdef\pdfoutput{0} +\fi +\newif\ifpdf +\ifnum\pdfoutput=0 +% latex is called for dvi output + \pdffalse + \usepackage{graphics} + \usepackage{hyperref} +\else +% pdflatex is called for pdf output + \pdftrue + \usepackage[pdftex]{graphicx} + \usepackage[pdftex]{hyperref} +\fi + +\setlength{\parindent}{0pt} \newcommand{\CDI}{\bfseries\sffamily CDI} % To define headers and footers @@ -49,16 +68,6 @@ %dvipdf %pdflatex -% To allow automatic selection of the right graphics type ... - -\newif\ifpdf -\ifx\pdfoutput\undefined - \pdffalse % LaTeX -\else - \pdfoutput=1 % PDFLaTeX - \pdftrue -\fi - \usepackage{thumbpdf} %\usepackage{html} @@ -226,9 +235,9 @@ CDI library routines: \clearpage \ifpdf \phantomsection +\printindex \fi \addcontentsline{toc}{chapter}{\indexname} -\printindex \end{document} diff --git a/doc/tex/f_examples.tex b/doc/tex/f_examples.tex index 1b1f0fa5b..2f08108d0 100644 --- a/doc/tex/f_examples.tex +++ b/doc/tex/f_examples.tex @@ -55,9 +55,9 @@ data: \end{lstlisting} -\section{Read a dataset} +\section{\label{example_read}Read a dataset} -This example reads the netCDF file {\tt example.nc} from \htmlref{Appendix B.1}{example_write}. +This example reads the netCDF file {\tt example.nc} from \htmlref{Appendix \ref{example_write}}{example_write}. \lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize] {../../examples/cdi_read_f.f} @@ -71,3 +71,21 @@ to {\tt FILETYPE\_GRB}. \lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize] {../../examples/cdi_copy_f.f} + +\section{\label{examples_f2003}Fortran 2003: mo\_cdi and iso\_c\_binding} + +This is the Fortran 2003 version of the reading and writing examples above. +The main differenc to {\tt cfortran.h} is the +character handling. Here {\tt CHARACTER(type=c\_char)} is used instead of +{\tt CHARACTER}. Additionally plain fortran charcters and character variables +have to be convertet to C charcters by +\begin{itemize} +\item appending {\tt '\textbackslash 0'} with {\tt //C\_NULL\_CHAR} +\item prepending {\tt C\_CHAR\_} to plain charcters +\item take {\tt ctrim} from {\tt mo\_cdi} for {\tt CHARACTER(type=c\_char)} variables +\end{itemize} + +\lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize] +{../../examples/cdi_read_f2003.f90} +\lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize] +{../../examples/cdi_write_f2003.f90} diff --git a/doc/tex/f_link.tex b/doc/tex/f_link.tex index 69cc88a96..78ce63835 100644 --- a/doc/tex/f_link.tex +++ b/doc/tex/f_link.tex @@ -1,3 +1,7 @@ +There are two different interfaces for using {\CDI} functions in Fortran: +{\tt cfortran.h} and the instrinsic {\tt iso\_c\_binding} module from Fortran +2003 standard. At first, the preparations for compilers without F2003 +capabilities are described.\\\\ Every FORTRAN file that references {\CDI} functions or constants must contain an appropriate {\tt INCLUDE} statement before the first such reference: @@ -39,3 +43,28 @@ For example with the netCDF library: f77 -o myprogram myprogram.o -L/usr/local/cdi/lib -lcdi \ -L/usr/local/netcdf/lib -lnetcdf \end{verbatim} + +For using the {\tt iso\_c\_bindings} two things are necessary in a program or module + +\begin{verbatim} + USE ISO_C_BINDING + USE mo_cdi +\end{verbatim} + +The {\tt iso\_c\_binding} module is included in {\tt mo\_cdi}, but without +{\tt cfortran.h} characters and character variables have to be handled separately. +Examples are available in section \ref{examples_f2003}. + +After installation {\tt mo\_cdi.o} and {\tt mo\_cdi.mod} are located in the +library and header directory respectively. {\tt cdilib.o} has to be +mentioned directly on the command line. It can be found in the +library directory, too. Depending on the {\CDI} configuration, a compile command +should look like this: + +\begin{verbatim} +nagf95 -f2003 -g cdi_read_f2003.f90 -L/usr/lib -lnetcdf -o cdi_read_example + -I/usr/local/include + /usr/local/lib/cdilib.o /usr/local/lib/mo_cdi.o +\end{verbatim} + + diff --git a/doc/tex/f_ref.tex b/doc/tex/f_ref.tex index 0b8a665a5..cb892bbbb 100644 --- a/doc/tex/f_ref.tex +++ b/doc/tex/f_ref.tex @@ -1,954 +1,1417 @@ -\section*{\tt \htmlref{gridCreate}{gridCreate}} - +\section*{\tt +\ifpdf +\hyperref[gridCreate]{gridCreate} +\else +gridCreate +\fi +} \begin{verbatim} INTEGER FUNCTION gridCreate(INTEGER gridtype, INTEGER size) \end{verbatim} Create a horizontal Grid +\ifpdfoutput{}{(\ref{gridCreate})} -\section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXbounds]{gridDefXbounds} +\else +gridDefXbounds +\fi +} \begin{verbatim} SUBROUTINE gridDefXbounds(INTEGER gridID, const REAL*8 xbounds) \end{verbatim} Define the bounds of a X-axis +\ifpdfoutput{}{(\ref{gridDefXbounds})} -\section*{\tt \htmlref{gridDefXlongname}{gridDefXlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXlongname]{gridDefXlongname} +\else +gridDefXlongname +\fi +} \begin{verbatim} SUBROUTINE gridDefXlongname(INTEGER gridID, CHARACTER*(*) longname) \end{verbatim} Define the longname of a X-axis +\ifpdfoutput{}{(\ref{gridDefXlongname})} -\section*{\tt \htmlref{gridDefXname}{gridDefXname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXname]{gridDefXname} +\else +gridDefXname +\fi +} \begin{verbatim} SUBROUTINE gridDefXname(INTEGER gridID, CHARACTER*(*) name) \end{verbatim} Define the name of a X-axis +\ifpdfoutput{}{(\ref{gridDefXname})} -\section*{\tt \htmlref{gridDefXsize}{gridDefXsize}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXsize]{gridDefXsize} +\else +gridDefXsize +\fi +} \begin{verbatim} SUBROUTINE gridDefXsize(INTEGER gridID, INTEGER xsize) \end{verbatim} Define the number of values of a X-axis +\ifpdfoutput{}{(\ref{gridDefXsize})} -\section*{\tt \htmlref{gridDefXunits}{gridDefXunits}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXunits]{gridDefXunits} +\else +gridDefXunits +\fi +} \begin{verbatim} SUBROUTINE gridDefXunits(INTEGER gridID, CHARACTER*(*) units) \end{verbatim} Define the units of a X-axis +\ifpdfoutput{}{(\ref{gridDefXunits})} -\section*{\tt \htmlref{gridDefXvals}{gridDefXvals}} - +\section*{\tt +\ifpdf +\hyperref[gridDefXvals]{gridDefXvals} +\else +gridDefXvals +\fi +} \begin{verbatim} SUBROUTINE gridDefXvals(INTEGER gridID, const REAL*8 xvals) \end{verbatim} Define the values of a X-axis +\ifpdfoutput{}{(\ref{gridDefXvals})} -\section*{\tt \htmlref{gridDefYbounds}{gridDefYbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYbounds]{gridDefYbounds} +\else +gridDefYbounds +\fi +} \begin{verbatim} SUBROUTINE gridDefYbounds(INTEGER gridID, const REAL*8 ybounds) \end{verbatim} Define the bounds of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYbounds})} -\section*{\tt \htmlref{gridDefYlongname}{gridDefYlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYlongname]{gridDefYlongname} +\else +gridDefYlongname +\fi +} \begin{verbatim} SUBROUTINE gridDefYlongname(INTEGER gridID, CHARACTER*(*) longname) \end{verbatim} Define the longname of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYlongname})} -\section*{\tt \htmlref{gridDefYname}{gridDefYname}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYname]{gridDefYname} +\else +gridDefYname +\fi +} \begin{verbatim} SUBROUTINE gridDefYname(INTEGER gridID, CHARACTER*(*) name) \end{verbatim} Define the name of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYname})} -\section*{\tt \htmlref{gridDefYsize}{gridDefYsize}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYsize]{gridDefYsize} +\else +gridDefYsize +\fi +} \begin{verbatim} SUBROUTINE gridDefYsize(INTEGER gridID, INTEGER ysize) \end{verbatim} Define the number of values of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYsize})} -\section*{\tt \htmlref{gridDefYunits}{gridDefYunits}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYunits]{gridDefYunits} +\else +gridDefYunits +\fi +} \begin{verbatim} SUBROUTINE gridDefYunits(INTEGER gridID, CHARACTER*(*) units) \end{verbatim} Define the units of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYunits})} -\section*{\tt \htmlref{gridDefYvals}{gridDefYvals}} - +\section*{\tt +\ifpdf +\hyperref[gridDefYvals]{gridDefYvals} +\else +gridDefYvals +\fi +} \begin{verbatim} SUBROUTINE gridDefYvals(INTEGER gridID, const REAL*8 yvals) \end{verbatim} Define the values of a Y-axis +\ifpdfoutput{}{(\ref{gridDefYvals})} -\section*{\tt \htmlref{gridDestroy}{gridDestroy}} - +\section*{\tt +\ifpdf +\hyperref[gridDestroy]{gridDestroy} +\else +gridDestroy +\fi +} \begin{verbatim} SUBROUTINE gridDestroy(INTEGER gridID) \end{verbatim} Destroy a horizontal Grid +\ifpdfoutput{}{(\ref{gridDestroy})} -\section*{\tt \htmlref{gridDuplicate}{gridDuplicate}} - +\section*{\tt +\ifpdf +\hyperref[gridDuplicate]{gridDuplicate} +\else +gridDuplicate +\fi +} \begin{verbatim} INTEGER FUNCTION gridDuplicate(INTEGER gridID) \end{verbatim} Duplicate a horizontal Grid +\ifpdfoutput{}{(\ref{gridDuplicate})} -\section*{\tt \htmlref{gridInqSize}{gridInqSize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqSize]{gridInqSize} +\else +gridInqSize +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqSize(INTEGER gridID) \end{verbatim} Get the size of a Grid +\ifpdfoutput{}{(\ref{gridInqSize})} -\section*{\tt \htmlref{gridInqType}{gridInqType}} - +\section*{\tt +\ifpdf +\hyperref[gridInqType]{gridInqType} +\else +gridInqType +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqType(INTEGER gridID) \end{verbatim} Get the type of a Grid +\ifpdfoutput{}{(\ref{gridInqType})} -\section*{\tt \htmlref{gridInqXbounds}{gridInqXbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXbounds]{gridInqXbounds} +\else +gridInqXbounds +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqXbounds(INTEGER gridID, REAL*8 xbounds) \end{verbatim} Get the bounds of a X-axis +\ifpdfoutput{}{(\ref{gridInqXbounds})} -\section*{\tt \htmlref{gridInqXlongname}{gridInqXlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXlongname]{gridInqXlongname} +\else +gridInqXlongname +\fi +} \begin{verbatim} SUBROUTINE gridInqXlongname(INTEGER gridID, CHARACTER*(*) longname) \end{verbatim} Get the longname of a X-axis +\ifpdfoutput{}{(\ref{gridInqXlongname})} -\section*{\tt \htmlref{gridInqXname}{gridInqXname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXname]{gridInqXname} +\else +gridInqXname +\fi +} \begin{verbatim} SUBROUTINE gridInqXname(INTEGER gridID, CHARACTER*(*) name) \end{verbatim} Get the name of a X-axis +\ifpdfoutput{}{(\ref{gridInqXname})} -\section*{\tt \htmlref{gridInqXsize}{gridInqXsize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXsize]{gridInqXsize} +\else +gridInqXsize +\fi +} \begin{verbatim} SUBROUTINE gridInqXsize(INTEGER gridID) \end{verbatim} Get the number of values of a X-axis +\ifpdfoutput{}{(\ref{gridInqXsize})} -\section*{\tt \htmlref{gridInqXunits}{gridInqXunits}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXunits]{gridInqXunits} +\else +gridInqXunits +\fi +} \begin{verbatim} SUBROUTINE gridInqXunits(INTEGER gridID, CHARACTER*(*) units) \end{verbatim} Get the units of a X-axis +\ifpdfoutput{}{(\ref{gridInqXunits})} -\section*{\tt \htmlref{gridInqXvals}{gridInqXvals}} - +\section*{\tt +\ifpdf +\hyperref[gridInqXvals]{gridInqXvals} +\else +gridInqXvals +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqXvals(INTEGER gridID, REAL*8 xvals) \end{verbatim} Get all values of a X-axis +\ifpdfoutput{}{(\ref{gridInqXvals})} -\section*{\tt \htmlref{gridInqYbounds}{gridInqYbounds}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYbounds]{gridInqYbounds} +\else +gridInqYbounds +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqYbounds(INTEGER gridID, REAL*8 ybounds) \end{verbatim} Get the bounds of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYbounds})} -\section*{\tt \htmlref{gridInqYlongname}{gridInqYlongname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYlongname]{gridInqYlongname} +\else +gridInqYlongname +\fi +} \begin{verbatim} SUBROUTINE gridInqXlongname(INTEGER gridID, CHARACTER*(*) longname) \end{verbatim} Get the longname of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYlongname})} -\section*{\tt \htmlref{gridInqYname}{gridInqYname}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYname]{gridInqYname} +\else +gridInqYname +\fi +} \begin{verbatim} SUBROUTINE gridInqYname(INTEGER gridID, CHARACTER*(*) name) \end{verbatim} Get the name of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYname})} -\section*{\tt \htmlref{gridInqYsize}{gridInqYsize}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYsize]{gridInqYsize} +\else +gridInqYsize +\fi +} \begin{verbatim} SUBROUTINE gridInqYsize(INTEGER gridID) \end{verbatim} Get the number of values of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYsize})} -\section*{\tt \htmlref{gridInqYunits}{gridInqYunits}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYunits]{gridInqYunits} +\else +gridInqYunits +\fi +} \begin{verbatim} SUBROUTINE gridInqYunits(INTEGER gridID, CHARACTER*(*) units) \end{verbatim} Get the units of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYunits})} -\section*{\tt \htmlref{gridInqYvals}{gridInqYvals}} - +\section*{\tt +\ifpdf +\hyperref[gridInqYvals]{gridInqYvals} +\else +gridInqYvals +\fi +} \begin{verbatim} INTEGER FUNCTION gridInqYvals(INTEGER gridID, REAL*8 yvals) \end{verbatim} Get all values of a Y-axis +\ifpdfoutput{}{(\ref{gridInqYvals})} -\section*{\tt \htmlref{streamClose}{streamClose}} - +\section*{\tt +\ifpdf +\hyperref[streamClose]{streamClose} +\else +streamClose +\fi +} \begin{verbatim} SUBROUTINE streamClose(INTEGER streamID) \end{verbatim} Close an open dataset +\ifpdfoutput{}{(\ref{streamClose})} -\section*{\tt \htmlref{streamDefByteorder}{streamDefByteorder}} - +\section*{\tt +\ifpdf +\hyperref[streamDefByteorder]{streamDefByteorder} +\else +streamDefByteorder +\fi +} \begin{verbatim} SUBROUTINE streamDefByteorder(INTEGER streamID, INTEGER byteorder) \end{verbatim} Define the byte order +\ifpdfoutput{}{(\ref{streamDefByteorder})} -\section*{\tt \htmlref{streamDefTimestep}{streamDefTimestep}} - +\section*{\tt +\ifpdf +\hyperref[streamDefTimestep]{streamDefTimestep} +\else +streamDefTimestep +\fi +} \begin{verbatim} INTEGER FUNCTION streamDefTimestep(INTEGER streamID, INTEGER tsID) \end{verbatim} Define time step +\ifpdfoutput{}{(\ref{streamDefTimestep})} -\section*{\tt \htmlref{streamDefVlist}{streamDefVlist}} - +\section*{\tt +\ifpdf +\hyperref[streamDefVlist]{streamDefVlist} +\else +streamDefVlist +\fi +} \begin{verbatim} SUBROUTINE streamDefVlist(INTEGER streamID, INTEGER vlistID) \end{verbatim} Define the variable list +\ifpdfoutput{}{(\ref{streamDefVlist})} -\section*{\tt \htmlref{streamInqByteorder}{streamInqByteorder}} - +\section*{\tt +\ifpdf +\hyperref[streamInqByteorder]{streamInqByteorder} +\else +streamInqByteorder +\fi +} \begin{verbatim} INTEGER FUNCTION streamInqByteorder(INTEGER streamID) \end{verbatim} Get the byte order +\ifpdfoutput{}{(\ref{streamInqByteorder})} -\section*{\tt \htmlref{streamInqFiletype}{streamInqFiletype}} - +\section*{\tt +\ifpdf +\hyperref[streamInqFiletype]{streamInqFiletype} +\else +streamInqFiletype +\fi +} \begin{verbatim} INTEGER FUNCTION streamInqFiletype(INTEGER streamID) \end{verbatim} Get the filetype +\ifpdfoutput{}{(\ref{streamInqFiletype})} -\section*{\tt \htmlref{streamInqTimestep}{streamInqTimestep}} - +\section*{\tt +\ifpdf +\hyperref[streamInqTimestep]{streamInqTimestep} +\else +streamInqTimestep +\fi +} \begin{verbatim} INTEGER FUNCTION streamInqTimestep(INTEGER streamID, INTEGER tsID) \end{verbatim} Get time step +\ifpdfoutput{}{(\ref{streamInqTimestep})} -\section*{\tt \htmlref{streamInqVlist}{streamInqVlist}} - +\section*{\tt +\ifpdf +\hyperref[streamInqVlist]{streamInqVlist} +\else +streamInqVlist +\fi +} \begin{verbatim} INTEGER FUNCTION streamInqVlist(INTEGER streamID) \end{verbatim} Get the variable list +\ifpdfoutput{}{(\ref{streamInqVlist})} -\section*{\tt \htmlref{streamOpenRead}{streamOpenRead}} - +\section*{\tt +\ifpdf +\hyperref[streamOpenRead]{streamOpenRead} +\else +streamOpenRead +\fi +} \begin{verbatim} INTEGER FUNCTION streamOpenRead(CHARACTER*(*) path) \end{verbatim} Open a dataset for reading +\ifpdfoutput{}{(\ref{streamOpenRead})} -\section*{\tt \htmlref{streamOpenWrite}{streamOpenWrite}} - +\section*{\tt +\ifpdf +\hyperref[streamOpenWrite]{streamOpenWrite} +\else +streamOpenWrite +\fi +} \begin{verbatim} INTEGER FUNCTION streamOpenWrite(CHARACTER*(*) path, INTEGER filetype) \end{verbatim} Create a new dataset +\ifpdfoutput{}{(\ref{streamOpenWrite})} -\section*{\tt \htmlref{streamReadVar}{streamReadVar}} - +\section*{\tt +\ifpdf +\hyperref[streamReadVar]{streamReadVar} +\else +streamReadVar +\fi +} \begin{verbatim} SUBROUTINE streamReadVar(INTEGER streamID, INTEGER varID, REAL*8 data, INTEGER nmiss) \end{verbatim} Read a variable +\ifpdfoutput{}{(\ref{streamReadVar})} -\section*{\tt \htmlref{streamReadVarSlice}{streamReadVarSlice}} - +\section*{\tt +\ifpdf +\hyperref[streamReadVarSlice]{streamReadVarSlice} +\else +streamReadVarSlice +\fi +} \begin{verbatim} SUBROUTINE streamReadVarSlice(INTEGER streamID, INTEGER varID, INTEGER levelID, REAL*8 data, INTEGER nmiss) \end{verbatim} Read a horizontal slice of a variable +\ifpdfoutput{}{(\ref{streamReadVarSlice})} -\section*{\tt \htmlref{streamWriteVar}{streamWriteVar}} - +\section*{\tt +\ifpdf +\hyperref[streamWriteVar]{streamWriteVar} +\else +streamWriteVar +\fi +} \begin{verbatim} SUBROUTINE streamWriteVar(INTEGER streamID, INTEGER varID, const REAL*8 data, INTEGER nmiss) \end{verbatim} Write a variable +\ifpdfoutput{}{(\ref{streamWriteVar})} -\section*{\tt \htmlref{streamWriteVarSlice}{streamWriteVarSlice}} - +\section*{\tt +\ifpdf +\hyperref[streamWriteVarSlice]{streamWriteVarSlice} +\else +streamWriteVarSlice +\fi +} \begin{verbatim} SUBROUTINE streamWriteVarSlice(INTEGER streamID, INTEGER varID, INTEGER levelID, const REAL*8 data, INTEGER nmiss) \end{verbatim} Write a horizontal slice of a variable +\ifpdfoutput{}{(\ref{streamWriteVarSlice})} -\section*{\tt \htmlref{taxisCreate}{taxisCreate}} - +\section*{\tt +\ifpdf +\hyperref[taxisCreate]{taxisCreate} +\else +taxisCreate +\fi +} \begin{verbatim} INTEGER FUNCTION taxisCreate(INTEGER taxistype) \end{verbatim} Create a Time axis +\ifpdfoutput{}{(\ref{taxisCreate})} -\section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefCalendar]{taxisDefCalendar} +\else +taxisDefCalendar +\fi +} \begin{verbatim} SUBROUTINE taxisDefCalendar(INTEGER taxisID, INTEGER calendar) \end{verbatim} Define the calendar +\ifpdfoutput{}{(\ref{taxisDefCalendar})} -\section*{\tt \htmlref{taxisDefRdate}{taxisDefRdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefRdate]{taxisDefRdate} +\else +taxisDefRdate +\fi +} \begin{verbatim} SUBROUTINE taxisDefRdate(INTEGER taxisID, INTEGER rdate) \end{verbatim} Define the reference date +\ifpdfoutput{}{(\ref{taxisDefRdate})} -\section*{\tt \htmlref{taxisDefRtime}{taxisDefRtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefRtime]{taxisDefRtime} +\else +taxisDefRtime +\fi +} \begin{verbatim} SUBROUTINE taxisDefRtime(INTEGER taxisID, INTEGER rtime) \end{verbatim} Define the reference time +\ifpdfoutput{}{(\ref{taxisDefRtime})} -\section*{\tt \htmlref{taxisDefVdate}{taxisDefVdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefVdate]{taxisDefVdate} +\else +taxisDefVdate +\fi +} \begin{verbatim} SUBROUTINE taxisDefVdate(INTEGER taxisID, INTEGER vdate) \end{verbatim} Define the verification date +\ifpdfoutput{}{(\ref{taxisDefVdate})} -\section*{\tt \htmlref{taxisDefVtime}{taxisDefVtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisDefVtime]{taxisDefVtime} +\else +taxisDefVtime +\fi +} \begin{verbatim} SUBROUTINE taxisDefVtime(INTEGER taxisID, INTEGER vtime) \end{verbatim} Define the verification time +\ifpdfoutput{}{(\ref{taxisDefVtime})} -\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}} - +\section*{\tt +\ifpdf +\hyperref[taxisDestroy]{taxisDestroy} +\else +taxisDestroy +\fi +} \begin{verbatim} SUBROUTINE taxisDestroy(INTEGER taxisID) \end{verbatim} Destroy a Time axis +\ifpdfoutput{}{(\ref{taxisDestroy})} -\section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqCalendar]{taxisInqCalendar} +\else +taxisInqCalendar +\fi +} \begin{verbatim} INTEGER FUNCTION taxisInqCalendar(INTEGER taxisID) \end{verbatim} Get the calendar +\ifpdfoutput{}{(\ref{taxisInqCalendar})} -\section*{\tt \htmlref{taxisInqRdate}{taxisInqRdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqRdate]{taxisInqRdate} +\else +taxisInqRdate +\fi +} \begin{verbatim} INTEGER FUNCTION taxisInqRdate(INTEGER taxisID) \end{verbatim} Get the reference date +\ifpdfoutput{}{(\ref{taxisInqRdate})} -\section*{\tt \htmlref{taxisInqRtime}{taxisInqRtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqRtime]{taxisInqRtime} +\else +taxisInqRtime +\fi +} \begin{verbatim} INTEGER FUNCTION taxisInqRtime(INTEGER taxisID) \end{verbatim} Get the reference time +\ifpdfoutput{}{(\ref{taxisInqRtime})} -\section*{\tt \htmlref{taxisInqVdate}{taxisInqVdate}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqVdate]{taxisInqVdate} +\else +taxisInqVdate +\fi +} \begin{verbatim} INTEGER FUNCTION taxisInqVdate(INTEGER taxisID) \end{verbatim} Get the verification date +\ifpdfoutput{}{(\ref{taxisInqVdate})} -\section*{\tt \htmlref{taxisInqVtime}{taxisInqVtime}} - +\section*{\tt +\ifpdf +\hyperref[taxisInqVtime]{taxisInqVtime} +\else +taxisInqVtime +\fi +} \begin{verbatim} INTEGER FUNCTION taxisInqVtime(INTEGER taxisID) \end{verbatim} Get the verification time +\ifpdfoutput{}{(\ref{taxisInqVtime})} -\section*{\tt \htmlref{vlistCat}{vlistCat}} - +\section*{\tt +\ifpdf +\hyperref[vlistCat]{vlistCat} +\else +vlistCat +\fi +} \begin{verbatim} SUBROUTINE vlistCat(INTEGER vlistID2, INTEGER vlistID1) \end{verbatim} Concatenate two variable lists +\ifpdfoutput{}{(\ref{vlistCat})} -\section*{\tt \htmlref{vlistCopy}{vlistCopy}} - +\section*{\tt +\ifpdf +\hyperref[vlistCopy]{vlistCopy} +\else +vlistCopy +\fi +} \begin{verbatim} SUBROUTINE vlistCopy(INTEGER vlistID2, INTEGER vlistID1) \end{verbatim} Copy a variable list +\ifpdfoutput{}{(\ref{vlistCopy})} -\section*{\tt \htmlref{vlistCopyFlag}{vlistCopyFlag}} - +\section*{\tt +\ifpdf +\hyperref[vlistCopyFlag]{vlistCopyFlag} +\else +vlistCopyFlag +\fi +} \begin{verbatim} SUBROUTINE vlistCopyFlag(INTEGER vlistID2, INTEGER vlistID1) \end{verbatim} Copy some entries of a variable list +\ifpdfoutput{}{(\ref{vlistCopyFlag})} -\section*{\tt \htmlref{vlistCreate}{vlistCreate}} - +\section*{\tt +\ifpdf +\hyperref[vlistCreate]{vlistCreate} +\else +vlistCreate +\fi +} \begin{verbatim} INTEGER FUNCTION vlistCreate() \end{verbatim} Create a variable list +\ifpdfoutput{}{(\ref{vlistCreate})} -\section*{\tt \htmlref{vlistDefAttFlt}{vlistDefAttFlt}} - -\begin{verbatim} - INTEGER FUNCTION vlistDefAttFlt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER len, const REAL*8 dp) -\end{verbatim} - -Define a floating point attribute - - -\section*{\tt \htmlref{vlistDefAttInt}{vlistDefAttInt}} - -\begin{verbatim} - INTEGER FUNCTION vlistDefAttInt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER len, - const INTEGER ip) -\end{verbatim} - -Define an integer attribute - - -\section*{\tt \htmlref{vlistDefAttTxt}{vlistDefAttTxt}} - -\begin{verbatim} - INTEGER FUNCTION vlistDefAttTxt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER len, - CHARACTER*(*) tp) -\end{verbatim} - -Define a text attribute - - -\section*{\tt \htmlref{vlistDefTaxis}{vlistDefTaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefTaxis]{vlistDefTaxis} +\else +vlistDefTaxis +\fi +} \begin{verbatim} SUBROUTINE vlistDefTaxis(INTEGER vlistID, INTEGER taxisID) \end{verbatim} Define the time axis +\ifpdfoutput{}{(\ref{vlistDefTaxis})} -\section*{\tt \htmlref{vlistDefVar}{vlistDefVar}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVar]{vlistDefVar} +\else +vlistDefVar +\fi +} \begin{verbatim} INTEGER FUNCTION vlistDefVar(INTEGER vlistID, INTEGER gridID, INTEGER zaxisID, INTEGER timeID) \end{verbatim} Define a Variable +\ifpdfoutput{}{(\ref{vlistDefVar})} -\section*{\tt \htmlref{vlistDefVarCode}{vlistDefVarCode}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarCode]{vlistDefVarCode} +\else +vlistDefVarCode +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarCode(INTEGER vlistID, INTEGER varID, INTEGER code) \end{verbatim} Define the code number of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarCode})} -\section*{\tt \htmlref{vlistDefVarDatatype}{vlistDefVarDatatype}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarDatatype]{vlistDefVarDatatype} +\else +vlistDefVarDatatype +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarDatatype(INTEGER vlistID, INTEGER varID, INTEGER datatype) \end{verbatim} Define the data type of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarDatatype})} -\section*{\tt \htmlref{vlistDefVarLongname}{vlistDefVarLongname}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarLongname]{vlistDefVarLongname} +\else +vlistDefVarLongname +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarLongname(INTEGER vlistID, INTEGER varID, CHARACTER*(*) longname) \end{verbatim} Define the long name of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarLongname})} -\section*{\tt \htmlref{vlistDefVarMissval}{vlistDefVarMissval}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarMissval]{vlistDefVarMissval} +\else +vlistDefVarMissval +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarMissval(INTEGER vlistID, INTEGER varID, REAL*8 missval) \end{verbatim} Define the missing value of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarMissval})} -\section*{\tt \htmlref{vlistDefVarName}{vlistDefVarName}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarName]{vlistDefVarName} +\else +vlistDefVarName +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarName(INTEGER vlistID, INTEGER varID, CHARACTER*(*) name) \end{verbatim} Define the name of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarName})} -\section*{\tt \htmlref{vlistDefVarStdname}{vlistDefVarStdname}} - -\begin{verbatim} - SUBROUTINE vlistDefVarStdname(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) stdname) -\end{verbatim} - -Define the standard name of a Variable - - -\section*{\tt \htmlref{vlistDefVarUnits}{vlistDefVarUnits}} - +\section*{\tt +\ifpdf +\hyperref[vlistDefVarUnits]{vlistDefVarUnits} +\else +vlistDefVarUnits +\fi +} \begin{verbatim} SUBROUTINE vlistDefVarUnits(INTEGER vlistID, INTEGER varID, CHARACTER*(*) units) \end{verbatim} Define the units of a Variable +\ifpdfoutput{}{(\ref{vlistDefVarUnits})} -\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}} - +\section*{\tt +\ifpdf +\hyperref[vlistDestroy]{vlistDestroy} +\else +vlistDestroy +\fi +} \begin{verbatim} SUBROUTINE vlistDestroy(INTEGER vlistID) \end{verbatim} Destroy a variable list +\ifpdfoutput{}{(\ref{vlistDestroy})} -\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}} - +\section*{\tt +\ifpdf +\hyperref[vlistDuplicate]{vlistDuplicate} +\else +vlistDuplicate +\fi +} \begin{verbatim} INTEGER FUNCTION vlistDuplicate(INTEGER vlistID) \end{verbatim} Duplicate a variable list +\ifpdfoutput{}{(\ref{vlistDuplicate})} -\section*{\tt \htmlref{vlistInqAtt}{vlistInqAtt}} - -\begin{verbatim} - INTEGER FUNCTION vlistInqAtt(INTEGER vlistID, INTEGER varID, INTEGER attnum, - CHARACTER*(*) name, INTEGER typep, INTEGER lenp) -\end{verbatim} - -Get information about an attribute - - -\section*{\tt \htmlref{vlistInqAttFlt}{vlistInqAttFlt}} - -\begin{verbatim} - INTEGER FUNCTION vlistInqAttFlt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER mlen, INTEGER dp) -\end{verbatim} - -Get the value(s) of a floating point attribute - - -\section*{\tt \htmlref{vlistInqAttInt}{vlistInqAttInt}} - -\begin{verbatim} - INTEGER FUNCTION vlistInqAttInt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER mlen, INTEGER ip) -\end{verbatim} - -Get the value(s) of an integer attribute - - -\section*{\tt \htmlref{vlistInqAttTxt}{vlistInqAttTxt}} - -\begin{verbatim} - INTEGER FUNCTION vlistInqAttTxt(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) name, INTEGER mlen, INTEGER tp) -\end{verbatim} - -Get the value(s) of a text attribute - - -\section*{\tt \htmlref{vlistInqNatts}{vlistInqNatts}} - -\begin{verbatim} - INTEGER FUNCTION vlistInqNatts(INTEGER vlistID, INTEGER varID, INTEGER nattsp) -\end{verbatim} - -Get number of variable attributes - - -\section*{\tt \htmlref{vlistInqTaxis}{vlistInqTaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqTaxis]{vlistInqTaxis} +\else +vlistInqTaxis +\fi +} \begin{verbatim} INTEGER FUNCTION vlistInqTaxis(INTEGER vlistID) \end{verbatim} Get the time axis +\ifpdfoutput{}{(\ref{vlistInqTaxis})} -\section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarCode]{vlistInqVarCode} +\else +vlistInqVarCode +\fi +} \begin{verbatim} INTEGER FUNCTION vlistInqVarCode(INTEGER vlistID, INTEGER varID) \end{verbatim} Get the Code number of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarCode})} -\section*{\tt \htmlref{vlistInqVarDatatype}{vlistInqVarDatatype}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarDatatype]{vlistInqVarDatatype} +\else +vlistInqVarDatatype +\fi +} \begin{verbatim} INTEGER FUNCTION vlistInqVarDatatype(INTEGER vlistID, INTEGER varID) \end{verbatim} Get the data type of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarDatatype})} -\section*{\tt \htmlref{vlistInqVarGrid}{vlistInqVarGrid}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarGrid]{vlistInqVarGrid} +\else +vlistInqVarGrid +\fi +} \begin{verbatim} INTEGER FUNCTION vlistInqVarGrid(INTEGER vlistID, INTEGER varID) \end{verbatim} Get the Grid ID of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarGrid})} -\section*{\tt \htmlref{vlistInqVarLongname}{vlistInqVarLongname}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarLongname]{vlistInqVarLongname} +\else +vlistInqVarLongname +\fi +} \begin{verbatim} SUBROUTINE vlistInqVarLongname(INTEGER vlistID, INTEGER varID, CHARACTER*(*) longname) \end{verbatim} Get the longname of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarLongname})} -\section*{\tt \htmlref{vlistInqVarMissval}{vlistInqVarMissval}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarMissval]{vlistInqVarMissval} +\else +vlistInqVarMissval +\fi +} \begin{verbatim} REAL*8 FUNCTION vlistInqVarMissval(INTEGER vlistID, INTEGER varID) \end{verbatim} Get the missing value of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarMissval})} -\section*{\tt \htmlref{vlistInqVarName}{vlistInqVarName}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarName]{vlistInqVarName} +\else +vlistInqVarName +\fi +} \begin{verbatim} SUBROUTINE vlistInqVarName(INTEGER vlistID, INTEGER varID, CHARACTER*(*) name) \end{verbatim} Get the name of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarName})} -\section*{\tt \htmlref{vlistInqVarStdname}{vlistInqVarStdname}} - -\begin{verbatim} - SUBROUTINE vlistInqVarStdname(INTEGER vlistID, INTEGER varID, - CHARACTER*(*) stdname) -\end{verbatim} - -Get the standard name of a Variable - - -\section*{\tt \htmlref{vlistInqVarUnits}{vlistInqVarUnits}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarUnits]{vlistInqVarUnits} +\else +vlistInqVarUnits +\fi +} \begin{verbatim} SUBROUTINE vlistInqVarUnits(INTEGER vlistID, INTEGER varID, CHARACTER*(*) units) \end{verbatim} Get the units of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarUnits})} -\section*{\tt \htmlref{vlistInqVarZaxis}{vlistInqVarZaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistInqVarZaxis]{vlistInqVarZaxis} +\else +vlistInqVarZaxis +\fi +} \begin{verbatim} INTEGER FUNCTION vlistInqVarZaxis(INTEGER vlistID, INTEGER varID) \end{verbatim} Get the Zaxis ID of a Variable +\ifpdfoutput{}{(\ref{vlistInqVarZaxis})} -\section*{\tt \htmlref{vlistNgrids}{vlistNgrids}} - +\section*{\tt +\ifpdf +\hyperref[vlistNgrids]{vlistNgrids} +\else +vlistNgrids +\fi +} \begin{verbatim} INTEGER FUNCTION vlistNgrids(INTEGER vlistID) \end{verbatim} Number of grids in a variable list +\ifpdfoutput{}{(\ref{vlistNgrids})} -\section*{\tt \htmlref{vlistNvars}{vlistNvars}} - +\section*{\tt +\ifpdf +\hyperref[vlistNvars]{vlistNvars} +\else +vlistNvars +\fi +} \begin{verbatim} INTEGER FUNCTION vlistNvars(INTEGER vlistID) \end{verbatim} Number of variables in a variable list +\ifpdfoutput{}{(\ref{vlistNvars})} -\section*{\tt \htmlref{vlistNzaxis}{vlistNzaxis}} - +\section*{\tt +\ifpdf +\hyperref[vlistNzaxis]{vlistNzaxis} +\else +vlistNzaxis +\fi +} \begin{verbatim} INTEGER FUNCTION vlistNzaxis(INTEGER vlistID) \end{verbatim} Number of zaxis in a variable list +\ifpdfoutput{}{(\ref{vlistNzaxis})} -\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}} - +\section*{\tt +\ifpdf +\hyperref[zaxisCreate]{zaxisCreate} +\else +zaxisCreate +\fi +} \begin{verbatim} INTEGER FUNCTION zaxisCreate(INTEGER zaxistype, INTEGER size) \end{verbatim} Create a vertical Z-axis +\ifpdfoutput{}{(\ref{zaxisCreate})} -\section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefLevels]{zaxisDefLevels} +\else +zaxisDefLevels +\fi +} \begin{verbatim} SUBROUTINE zaxisDefLevels(INTEGER zaxisID, const REAL*8 levels) \end{verbatim} Define the levels of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefLevels})} -\section*{\tt \htmlref{zaxisDefLongname}{zaxisDefLongname}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefLongname]{zaxisDefLongname} +\else +zaxisDefLongname +\fi +} \begin{verbatim} SUBROUTINE zaxisDefLongname(INTEGER zaxisID, CHARACTER*(*) longname) \end{verbatim} Define the longname of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefLongname})} -\section*{\tt \htmlref{zaxisDefName}{zaxisDefName}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefName]{zaxisDefName} +\else +zaxisDefName +\fi +} \begin{verbatim} SUBROUTINE zaxisDefName(INTEGER zaxisID, CHARACTER*(*) name) \end{verbatim} Define the name of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefName})} -\section*{\tt \htmlref{zaxisDefUnits}{zaxisDefUnits}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDefUnits]{zaxisDefUnits} +\else +zaxisDefUnits +\fi +} \begin{verbatim} SUBROUTINE zaxisDefUnits(INTEGER zaxisID, CHARACTER*(*) units) \end{verbatim} Define the units of a Z-axis +\ifpdfoutput{}{(\ref{zaxisDefUnits})} -\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}} - +\section*{\tt +\ifpdf +\hyperref[zaxisDestroy]{zaxisDestroy} +\else +zaxisDestroy +\fi +} \begin{verbatim} SUBROUTINE zaxisDestroy(INTEGER zaxisID) \end{verbatim} Destroy a vertical Z-axis +\ifpdfoutput{}{(\ref{zaxisDestroy})} -\section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLevel]{zaxisInqLevel} +\else +zaxisInqLevel +\fi +} \begin{verbatim} REAL*8 FUNCTION zaxisInqLevel(INTEGER zaxisID, INTEGER levelID) \end{verbatim} Get one level of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLevel})} -\section*{\tt \htmlref{zaxisInqLevels}{zaxisInqLevels}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLevels]{zaxisInqLevels} +\else +zaxisInqLevels +\fi +} \begin{verbatim} SUBROUTINE zaxisInqLevels(INTEGER zaxisID, REAL*8 levels) \end{verbatim} Get all levels of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLevels})} -\section*{\tt \htmlref{zaxisInqLongname}{zaxisInqLongname}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqLongname]{zaxisInqLongname} +\else +zaxisInqLongname +\fi +} \begin{verbatim} SUBROUTINE zaxisInqLongname(INTEGER zaxisID, CHARACTER*(*) longname) \end{verbatim} Get the longname of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqLongname})} -\section*{\tt \htmlref{zaxisInqName}{zaxisInqName}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqName]{zaxisInqName} +\else +zaxisInqName +\fi +} \begin{verbatim} SUBROUTINE zaxisInqName(INTEGER zaxisID, CHARACTER*(*) name) \end{verbatim} Get the name of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqName})} -\section*{\tt \htmlref{zaxisInqSize}{zaxisInqSize}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqSize]{zaxisInqSize} +\else +zaxisInqSize +\fi +} \begin{verbatim} INTEGER FUNCTION zaxisInqSize(INTEGER zaxisID) \end{verbatim} Get the size of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqSize})} -\section*{\tt \htmlref{zaxisInqType}{zaxisInqType}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqType]{zaxisInqType} +\else +zaxisInqType +\fi +} \begin{verbatim} INTEGER FUNCTION zaxisInqType(INTEGER zaxisID) \end{verbatim} Get the type of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqType})} -\section*{\tt \htmlref{zaxisInqUnits}{zaxisInqUnits}} - +\section*{\tt +\ifpdf +\hyperref[zaxisInqUnits]{zaxisInqUnits} +\else +zaxisInqUnits +\fi +} \begin{verbatim} SUBROUTINE zaxisInqUnits(INTEGER zaxisID, CHARACTER*(*) units) \end{verbatim} Get the units of a Z-axis +\ifpdfoutput{}{(\ref{zaxisInqUnits})} diff --git a/doc/tex/formats.tex b/doc/tex/formats.tex index c74298d21..255af5b41 100644 --- a/doc/tex/formats.tex +++ b/doc/tex/formats.tex @@ -3,7 +3,7 @@ \section{GRIB edition 1} -\htmlref{GRIB}{GRIB} (GRIdded Binary) is a standard format designed by the +GRIB \cite{GRIB} (GRIdded Binary) is a standard format designed by the World Meteorological Organization (WMO) to support the efficient transmission and storage of gridded meteorological data. @@ -76,7 +76,7 @@ data representation and level types are implemented: \\ \section{NetCDF} -\htmlref{NetCDF}{NetCDF} (Network Common Data Form) is an interface for array-oriented data +NetCDF \cite{NetCDF} (Network Common Data Form) is an interface for array-oriented data access and a library that provides an implementation of the interface. The netCDF library also defines a machine-independent format for representing scientific data. Together, the interface, library, and @@ -95,7 +95,7 @@ of the {\CDI} library (see \htmlref{Build}{build}). \section{SERVICE} SERVICE is the binary exchange format of the atmospheric general -circulation model \htmlref{ECHAM}{ECHAM}. +circulation model ECHAM \cite{ECHAM}. It has a header section with 8 integer values followed by the data section. The header and the data section have the standard Fortran blocking for binary data records. @@ -132,12 +132,11 @@ The meaning of the variables are: \section{EXTRA} -EXTRA is the standard binary output format of the ocean model \htmlref{MPIOM}{MPIOM}. -It has a header section with 4 integer values followed by the data section. -The header and the data section have the standard Fortran blocking -for binary data records. -An EXTRA record can have an accuracy of 4 or 8 bytes and -the byteorder can be little or big endian. +EXTRA is the standard binary output format of the ocean model MPIOM +\cite{MPIOM}. It has a header section with 4 integer values followed by the +data section. The header and the data section have the standard Fortran +blocking for binary data records. An EXTRA record can have an accuracy of 4 or +8 bytes and the byteorder can be little or big endian. The following Fortran code example can be used to read an EXTRA record with an accuracy of 4 bytes: @@ -165,7 +164,7 @@ The meaning of the variables are: \section{IEG} -IEG is the standard binary output format of the regional model \htmlref{REMO}{REMO}. +IEG is the standard binary output format of the regional model REMO \cite{REMO}. It is simple an unpacked GRIB edition 1 format. The product and grid description section are coded with 4 byte integer values and the data section can have 4 or 8 byte IEEE floating point values. diff --git a/doc/tex/makedoc b/doc/tex/makedoc index af1303181..eb1025985 100755 --- a/doc/tex/makedoc +++ b/doc/tex/makedoc @@ -274,11 +274,18 @@ foreach $key (@sorted_func) { $cproto = $hrefproto{$key}; $title = $hreftitle{$key}; - printcfdoc ("\n\n\\section*{\\tt \\htmlref{$key}{$key}}\n\n"); + printcfdoc ("\n\n\\section*{\\tt "); + printcfdoc ("\\ifpdf\n"); + printcfdoc ("\\hyperref[$key]{$key}\n"); + printcfdoc ("\\else\n"); + printcfdoc ("$key\n"); + printcfdoc ("\\fi\n"); + printcfdoc ("}\n"); printcfdoc ("\\begin{verbatim}\n"); printproto ($cproto); printcfdoc ("\\end{verbatim}\n"); printcfdoc ("\n$title\n"); + printcfdoc ("\\ifpdfoutput{}{(\\ref{$key})}\n"); } sub printproto { diff --git a/doc/tex/makehtml b/doc/tex/makehtml index f47b5469c..5257c52ad 100755 --- a/doc/tex/makehtml +++ b/doc/tex/makehtml @@ -1,9 +1,4 @@ -#cat > cdi.ist << 'EOF' -#delim_0 "{\\idxdotfill} " -#headings_flag 1 -#heading_prefix "{\\centerline {\\Large \\bf " -#%heading_prefix "{\\centerline {\\bfseries " -#heading_suffix "}}" -#EOF -#makeindex -s cdi.ist cdi.idx -latex2html -local_icons -split 4 -toc_depth 3 -white cdi.tex +#!/bin/sh +if [ ! -d ../html ];then mkdir ../html ;fi +htlatex cdi_fman.tex "html" "" -d../html/ +htlatex cdi_cman.tex "html" "" -d../html/ diff --git a/examples/Makefile.am b/examples/Makefile.am index 8c9a9e934..c9aa5aaa0 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,6 +1,9 @@ ## Process this file with automake to produce Makefile.in # -noinst_PROGRAMS = cdi_write cdi_read cdi_copy + noinst_PROGRAMS = cdi_write cdi_read cdi_copy +if CREATE_ISOC + noinst_PROGRAMS += cdi_read_f2003 cdi_write_f2003 +endif # cdi_write_SOURCES = cdi_write.c cdi_write_LDADD = ../src/libcdi.a $(LDFLAGS) @@ -13,4 +16,10 @@ cdi_copy_LDADD = ../src/libcdi.a $(LDFLAGS) # AM_CPPFLAGS = -I$(top_srcdir)/src # +cdi_read_f2003: cdi_read_f2003.f90 + $(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@ +# +cdi_write_f2003: cdi_write_f2003.f90 + $(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@ +# CLEANFILES = `ls *~` diff --git a/examples/Makefile.in b/examples/Makefile.in index 607d16c6a..ac1f955d2 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -34,17 +34,20 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = cdi_write$(EXEEXT) cdi_read$(EXEEXT) \ - cdi_copy$(EXEEXT) + cdi_copy$(EXEEXT) $(am__EXEEXT_1) +@CREATE_ISOC_TRUE@am__append_1 = cdi_read_f2003 cdi_write_f2003 subdir = examples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = +@CREATE_ISOC_TRUE@am__EXEEXT_1 = cdi_read_f2003$(EXEEXT) \ +@CREATE_ISOC_TRUE@ cdi_write_f2003$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_cdi_copy_OBJECTS = cdi_copy.$(OBJEXT) cdi_copy_OBJECTS = $(am_cdi_copy_OBJECTS) @@ -53,9 +56,15 @@ cdi_copy_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1) am_cdi_read_OBJECTS = cdi_read.$(OBJEXT) cdi_read_OBJECTS = $(am_cdi_read_OBJECTS) cdi_read_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1) +cdi_read_f2003_SOURCES = cdi_read_f2003.c +cdi_read_f2003_OBJECTS = cdi_read_f2003.$(OBJEXT) +cdi_read_f2003_LDADD = $(LDADD) am_cdi_write_OBJECTS = cdi_write.$(OBJEXT) cdi_write_OBJECTS = $(am_cdi_write_OBJECTS) cdi_write_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1) +cdi_write_f2003_SOURCES = cdi_write_f2003.c +cdi_write_f2003_OBJECTS = cdi_write_f2003.$(OBJEXT) +cdi_write_f2003_LDADD = $(LDADD) DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles @@ -63,9 +72,10 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) $(cdi_write_SOURCES) +SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) cdi_read_f2003.c \ + $(cdi_write_SOURCES) cdi_write_f2003.c DIST_SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) \ - $(cdi_write_SOURCES) + cdi_read_f2003.c $(cdi_write_SOURCES) cdi_write_f2003.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -92,6 +102,8 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCMODEXT = @FCMODEXT@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ @@ -124,6 +136,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -239,7 +252,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_copy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_read_f2003.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_write_f2003.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -430,6 +445,12 @@ uninstall-am: mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am +# +cdi_read_f2003: cdi_read_f2003.f90 + $(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@ +# +cdi_write_f2003: cdi_write_f2003.f90 + $(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/src/Makefile.am b/src/Makefile.am index dd80a398a..d56c35b08 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,9 +1,15 @@ ## Process this file with automake to produce Makefile.in # +BUILT_SOURCES = cdilib.c +# lib_LIBRARIES = libcdi.a # include_HEADERS = cdi.h cdi.inc # +if CREATE_ISOC +include_HEADERS += mo_cdi.$(FCMODEXT) +endif +# libcdi_a_SOURCES = \ cdiFortran.c \ cdi_error.c \ @@ -87,6 +93,32 @@ cdiFortran.o: cdiFortran.c source='$<' object='$@' libtool=no \ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \ $(CCDEPMODE) $(depcomp) \ - $(COMPILE) $(CFINT) -c `test -f '$<' || echo '$(srcdir)/'`$< + $(COMPILE) $(CFINT) $(REAL4) -c `test -f '$<' || echo '$(srcdir)/'`$< +# +cdilib.c: + ./make_cdilib +# +cdilib.o: cdilib.c + $(COMPILE) $(CFINT) $(REAL4) -c $< +# +all-local: $(LOCALTARGETS) + +LOCALTARGETS = + +if CREATE_ISOC +LOCALTARGETS += mo_cdi.o cdilib.o +endif +# +install-data-local: $(LOCALTARGETS) + @for f in $(LOCALTARGETS) ; do \ + echo " $(INSTALL_DATA) $$f \"$(DESTDIR)$(libdir)/$$f\""; \ + $(INSTALL_DATA) $$f "$(DESTDIR)$(libdir)/$$f" ; \ + done +# +mo_cdi.o: mo_cdi.f90 + $(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90 +# +mo_cdi.$(FCMODEXT): mo_cdi.f90 + $(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90 # -CLEANFILES = `ls *~` +CLEANFILES = `ls *~` mo_cdi.$(FCMODEXT) diff --git a/src/Makefile.in b/src/Makefile.in index e2b34c0cb..8bfff116f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -34,12 +34,15 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +# +@CREATE_ISOC_TRUE@am__append_1 = mo_cdi.$(FCMODEXT) +@CREATE_ISOC_TRUE@am__append_2 = mo_cdi.o cdilib.o subdir = src -DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ +DIST_COMMON = $(am__include_HEADERS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs @@ -82,6 +85,7 @@ CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libcdi_a_SOURCES) DIST_SOURCES = $(libcdi_a_SOURCES) +am__include_HEADERS_DIST = cdi.h cdi.inc mo_cdi.$(FCMODEXT) includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(include_HEADERS) ETAGS = etags @@ -110,6 +114,8 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCMODEXT = @FCMODEXT@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ @@ -142,6 +148,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -191,10 +198,12 @@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ +# +BUILT_SOURCES = cdilib.c # lib_LIBRARIES = libcdi.a # -include_HEADERS = cdi.h cdi.inc +include_HEADERS = cdi.h cdi.inc $(am__append_1) # libcdi_a_SOURCES = \ cdiFortran.c \ @@ -275,9 +284,10 @@ libcdi_a_SOURCES = \ util.h \ varscan.h +LOCALTARGETS = $(am__append_2) # -CLEANFILES = `ls *~` -all: config.h +CLEANFILES = `ls *~` mo_cdi.$(FCMODEXT) +all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: @@ -517,13 +527,15 @@ distdir: $(DISTFILES) fi; \ done check-am: all-am -check: check-am -all-am: Makefile $(LIBRARIES) $(HEADERS) config.h +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) config.h all-local installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -548,6 +560,7 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLIBRARIES mostlyclean-am @@ -568,7 +581,7 @@ info: info-am info-am: -install-data-am: install-includeHEADERS +install-data-am: install-data-local install-includeHEADERS install-dvi: install-dvi-am @@ -607,12 +620,13 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-hdr distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ @@ -626,7 +640,27 @@ cdiFortran.o: cdiFortran.c source='$<' object='$@' libtool=no \ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \ $(CCDEPMODE) $(depcomp) \ - $(COMPILE) $(CFINT) -c `test -f '$<' || echo '$(srcdir)/'`$< + $(COMPILE) $(CFINT) $(REAL4) -c `test -f '$<' || echo '$(srcdir)/'`$< +# +cdilib.c: + ./make_cdilib +# +cdilib.o: cdilib.c + $(COMPILE) $(CFINT) $(REAL4) -c $< +# +all-local: $(LOCALTARGETS) +# +install-data-local: $(LOCALTARGETS) + @for f in $(LOCALTARGETS) ; do \ + echo " $(INSTALL_DATA) $$f \"$(DESTDIR)$(libdir)/$$f\""; \ + $(INSTALL_DATA) $$f "$(DESTDIR)$(libdir)/$$f" ; \ + done +# +mo_cdi.o: mo_cdi.f90 + $(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90 +# +mo_cdi.$(FCMODEXT): mo_cdi.f90 + $(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/tests/Makefile.in b/tests/Makefile.in index 077ebd8de..74a05d4c2 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -36,8 +36,8 @@ check_PROGRAMS = test_grib$(EXEEXT) subdir = tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs @@ -82,6 +82,8 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCMODEXT = @FCMODEXT@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ @@ -114,6 +116,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ -- GitLab